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

Joj*_*oji 4 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']
Run Code Online (Sandbox Code Playgroud)

这样就Add<1,2>可以得到3数字类型。然而我正在努力实现Minus实用程序类型来实现minus计算

理想情况下Minus<3,1>会给你2

jca*_*alz 5

您可以Minus按照与实现方式类似的方式实现Add:通过使用类型函数进行可变元组操作CreateArray

type Minus<A extends number, B extends number> =
    CreateArray<A, 1> extends [...CreateArray<B, 1>, ...infer R] ? R['length'] : never;
Run Code Online (Sandbox Code Playgroud)

这里我们创建两个长度为A和的元组B。如果A大于或等于B,则将CreateArray<A, 1>从 中至少相同的元素开始CreateArray<B, 1>。通过对中的其余元素进行条件类型推断CreateArray<A, 1>,我们得到一个R长度为B- 的元组A

type Seven = Minus<10, 3> // 7
type Two = Minus<3, 1> // 2
Run Code Online (Sandbox Code Playgroud)

请注意,这里肯定有一些警告,它们与 ; 中的相同Add。如果你的AB是负数,或者不是整数,或者数值太大(大于 999),你将遇到编译器问题。所以要小心;这种代码是为了娱乐,而不是为了商业。

Playground 代码链接