Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@roine
Last active October 11, 2021 00:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save roine/78a582d9f3bd8c34bab0ec259bfe33d5 to your computer and use it in GitHub Desktop.
Save roine/78a582d9f3bd8c34bab0ec259bfe33d5 to your computer and use it in GitHub Desktop.
Range of numbers
type NumberRange<Min extends number, Max extends number> = _Range<Max, _Range1<Min,[Min]>>;
type _Range1<Min extends number, Acc extends unknown[]> = Acc['length'] extends Min ? Acc : _Range1<Min, [Min, ...Acc]>
type _Range<Max extends number, Range extends unknown[]> = Range['length'] extends Max
? Range['length']
: Range['length'] | _Range<Max, [Max, ...Range]>;
type FiveTo7 = NumberRange<5,7>
// 5 | 6 | 7
type OneTo7 = NumberRange<1,7>
// 1 | 2 | 3 | 4 | 5 | 6 | 7
type ImpossibleStart0 = NumberRange<0,7>
// compile Error
type ZeroTo7 = 0 | NumberRange<1,7>
// 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
type ImpossibleDescent = NumberRange<8,7>
// compile Error
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment