logoProsperBao

Subtract

2022-06-06 10

题目来源(type-challenges)

问题

实现一个减法

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

拆分