问题 #
实现一个减法
type case1 = Subtract<1, 1> // 0
type case2 = Subtract<2, 1> // 1
type case3 = Subtract<1, 2> // never
type case4 = Subtract<1000, 999> // 1
解答 #
type Tuple<T, Res extends 1[] = []> = 0 extends 1 ? never : Res['length'] extends T ? Res : Tuple<T, [...Res, 1]>;
type Subtract<M extends number, S extends number> = Tuple<M> extends [...Tuple<S>, ...infer Rest] ? Rest['length'] : never
拆分 #
- 和 Inclusive Range 类似
- 利用非条件结束递归尾延长递归深度