Created
June 2, 2022 14:31
-
-
Save Grubba27/cf08d4dd047e57f382e9400c80bec43b to your computer and use it in GitHub Desktop.
Range in typelevel
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 GreaterThan< | |
| T extends number, | |
| U extends number, | |
| C extends unknown[] = [] | |
| > = | |
| T extends U | |
| ? false | |
| : C['length'] extends T | |
| ? false | |
| : C['length'] extends U | |
| ? true | |
| : GreaterThan<T, U, [...C, 1]>; | |
| type Range | |
| <Value extends number, Start extends number, End extends number> = | |
| GreaterThan<Value, Start> extends true | |
| ? GreaterThan<Value, End> extends false | |
| ? Value | |
| : never | |
| : never; | |
| const k: Range<1, 2 , 10> // never; | |
| const k2: Range<4, 2 , 10> // 4; | |
| const k3: Range<10, 2 , 10> // 10; | |
| const k4: Range<11, 2 , 10> // never; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment