数组长度做计算
数组长度实现加减乘除
加
type BuildArray<
Length extends number,
Ele = unknown,
Arr extends unknown[] = []
> = Arr['length'] extends Length ?
Arr :
BuildArray<Length,Ele,[...Arr,Ele]>
type Add<Num1 extends number, Num2 extends number> = [...BuildArray<Num1>,...BuildArray<Num2>]['length'];
type add = Add<1,2>;
减
type BuildArray<
Length extends number,
Ele = unknown,
Arr extends unknown[] = []
> = Arr['length'] extends Length ?
Arr :
BuildArray<Length,Ele,[...Arr,Ele]>
type Subtract<Num1 extends number, Num2 extends number> = BuildArray<Num1> extends [...arr1: BuildArray<Num2>, ...arr2: infer Rest] ?
Rest['length'] : never
乘
type BuildArray<
Length extends number,
Ele = unknown,
Arr extends unknown[] = []
> = Arr['length'] extends Length ?
Arr :
BuildArray<Length,Ele,[...Arr,Ele]>
type Subtract<Num1 extends number, Num2 extends number> = BuildArray<Num1> extends [...arr1: BuildArray<Num2>, ...arr2: infer Rest] ?
Rest['length'] : never
type Mutiply<
Num1 extends number,
Num2 extends number,
ResultArr extends unknown[] = []
> = Num2 extends 0 ?
ResultArr['length'] :
Mutiply<Num1,Subtract<Num2,1>,[...BuildArray<Num1>,...ResultArr]>;
type mutiply = Mutiply<3,5>;
除
type BuildArray<
Length extends number,
Ele = unknown,
Arr extends unknown[] = []
> = Arr['length'] extends Length ?
Arr :
BuildArray<Length,Ele,[...Arr,Ele]>
type Subtract<Num1 extends number, Num2 extends number> = BuildArray<Num1> extends [...arr1: BuildArray<Num2>, ...arr2: infer Rest] ?
Rest['length'] : never
type Divide<
Num1 extends number,
Num2 extends number,
ResultArr extends unknown[] = []
> = Num1 extends 0 ?
ResultArr['length'] :
Divide<Subtract<Num1,Num2>,Num2,[unknown, ...ResultArr]>;
type divide = Divide<6,3>;
求字符串的长度的类型
type StrLen<
Str extends string,
ResultArr extends unknown[] = []
> = Str extends `${string}${infer Rest}`?
StrLen<Rest,[...ResultArr, unknown]>
: ResultArr['length'];
type str = StrLen<'123'>;
比较两个值的大小
A与B比较,如果A大于B则返回true,如果A小于B则返回false。
type GreaterThan<
Num1 extends number,
Num2 extends number,
CountArr extends unknown[] = []
> = Num1 extends Num2 ? false :
CountArr['length'] extends Num2 ? true :
CountArr['length'] extends Num1 ? false :
GreaterThan<Num1, Num2, [...CountArr, unknown]>;
type than = GreaterThan<4,3>;
Fibonacci 数列的计算
type FibonacciLoop<
PrevArr extends unknown[],
CurrentArr extends unknown[],
IndexArr extends unknown[] = [],
Num extends number = 1
> = IndexArr['length'] extends Num
? CurrentArr['length']
: FibonacciLoop<CurrentArr, [...PrevArr, ...CurrentArr], [...IndexArr, unknown], Num>
type Fibonacci<Num extends number> = FibonacciLoop<[1], [], [], Num>;
type num = Fibonacci<6>;