以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - TypeScript 类型谜题
48. implement Divide<A, B>
可以通过递归和减法操作实现Divide<A, B>。
首先要注意不合法的情况,即B为0,此时应该返回never类型。
对于合法的情况,可以递归减去B,直到A小于B为止,同时记录减去的次数,即为结果。具体代码实现如下:
type Divide<A extends number, B extends number> = B extends 0 ? never : A extends 0 ? 0 : [A, B] extends [infer X, infer Y] ? Y extends 1 ? X : X extends Y ? 1 : X extends number ? Divide<Exclude<X, Y>, Y> extends infer Z ? Z extends number ? Z+1 : never : never : never;
在代码中,我们使用了infer
关键字和类型推导,方便地将类型X和Y提取出来进行比较和递归。
测试样例:
type A = Divide<1, 0> // nevertype B = Divide<4, 2> // 2type C = Divide<10, 3> // 3