range union type 얻기

Tags
설명
1 | 2 | 3 | 4 | 5 이런 유니온 타입을 쉽게 만들 수 있는 방법
 
 
이 둘을 조합하여 range sequence number union type을 생성하도록 타입을 정의할 수 있다.
 
type Ran<T extends number> = number extends T ? number :_Range<T, []>; type _Range<T extends number, R extends unknown[]> = R['length'] extends T ? R[number] : _Range<T, [R['length'], ...R]>; type R5 = Ran<998> const a: R5 = 3 // correct const b: R5 = 999 // wrong
 
https://stackoverflow.com/a/39495173 ← 여기 답변 게 더 좋음
type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]> type IntRange<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>> type T = IntRange<20, 300>