我try 过用打字脚本练习打字体操,我的目标是实现对数字文字的数学运算.
首先,我实现了类型BuildArray
:
type BuildArray<
Length extends number,
Ele = unknown,
Arr extends unknown[] = []
> = Arr['length'] extends Length
? Arr
: BuildArray<Length, Ele, [...Arr, Ele]>;
type MyArray = BuildArray<3> // type MyArray = [unknown, unknown, unknown]
然后,我实现了类型Add
:
type Add<Num1 extends number, Num2 extends number> =
[...BuildArray<Num1>, ...BuildArray<Num2>]['length']
type AddResult = Add<2, 5> // type AddResult = 7
但是,当我try 在Add
的基础上实现Multiply
时,出现错误:
type Multiply<Num1 extends number, Num2 extends number, Counter extends number = 0, Result extends number = 0> =
Counter extends Num2?
Result:
Multiply<Num1, Num2, Add<Counter, 1>, Add<Num1, Result>>
type MultiplyResult = Multiply<4, 5> // type MultiplyResult = 20
虽然结果是正确的,但出现编译错误:
有人能告诉我为什么会发生这个编译错误吗?