Last active
October 11, 2021 00:37
-
-
Save roine/78a582d9f3bd8c34bab0ec259bfe33d5 to your computer and use it in GitHub Desktop.
Range of numbers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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