我制作了一个实用程序类型来添加两个数字类型
type createArray<Len, Ele, Arr extends Ele[] = []> = Arr['length'] extends Len ? Arr : createArray<Len, Ele, [Ele, ...Arr]>
type Add<A extends number, B extends number> = [...createArray<A, 1>, ...createArray<B, 1>]['length']
使得CCD_ 1给你数字类型的CCD_。然而,我很难实现Minus
实用程序类型来实现minus
计算
理想情况下Minus<3,1>
会给你2
。
您可以用与实现Add
类似的方式来实现Minus
:通过使用CreateArray
类型函数进行可变元组操作:
type Minus<A extends number, B extends number> =
CreateArray<A, 1> extends [...CreateArray<B, 1>, ...infer R] ? R['length'] : never;
这里我们创建两个长度为Add<1,2>
0和B
的元组。如果A
大于或等于B
,则CreateArray<A, 1>
将以来自CreateArray<B, 1>
的至少相同元素开始。通过对CreateArray<A, 1>
中的其余元素进行条件类型推理,我们得到了一个长度为B
减去A
:的元组R
type Seven = Minus<10, 3> // 7
type Two = Minus<3, 1> // 2
请注意,这里肯定有一些注意事项,它们与3
0中的相同;如果您的A
或B
是负数,或者不是整数,或者幅度太大(大于999(,您将遇到编译器问题。所以要小心;这种代码是用来娱乐的,而不是用来做生意的。
游乐场链接到代码