TypeScript:有没有一种方法可以创建一个实用程序类型来对数字进行减法计算



我制作了一个实用程序类型来添加两个数字类型

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

请注意,这里肯定有一些注意事项,它们与30中的相同;如果您的AB是负数,或者不是整数,或者幅度太大(大于999(,您将遇到编译器问题。所以要小心;这种代码是用来娱乐的,而不是用来做生意的。

游乐场链接到代码

最新更新