題目
中文
給定一個正整數作爲類型的參數,要求返回的類型是該數字減 1。
例如:
type Zero = MinusOne<1>; // 0
type FiftyFour = MinusOne<55>; // 54
English
Given a number (always positive) as a type. Your type should return the number decreased by one.
For example:
type Zero = MinusOne<1>; // 0
type FiftyFour = MinusOne<55>; // 54
答案
type MinusOne<T extends number, A extends any[] = []> = T extends [
any,
...A
]['length']
? A['length']
: T extends [any, any, ...A]['length']
? [any, ...A]['length']
: MinusOne<T, [0, 0, ...A]>;
支持 T
最大等於2000
, 每次遞歸時, 數組的長度+2, T = 2000 時, 會產生1000
此的遞歸, 這也是 typescript 所支持遞歸深度的極限了