挑战
给定一个正整数作为类型的参数,要求返回的类型是该数字减 1。
例如:
type Zero = MinusOne<1>; // 0
type FiftyFour = MinusOne<55>; // 54解答
这道题我使用的递归,只实现了前面的几个测试用例。原理是借助于一个辅助数组,初始为空数组,然后递归地往数组中添加元素,直到长度等于输入的数字,之后我们只需要返回数组的长度减 1 即可。
type Pop<T extends any[]> = T extends [...infer head, any] ? head : never;
type MinusOne<T extends number, A extends any[] = []> = A['length'] extends T
? Pop<A>['length']
: MinusOne<T, [...A, 0]>;