以下为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> // never
type B = Divide<4, 2> // 2
type C = Divide<10, 3> // 3