Skip to content

Instantly share code, notes, and snippets.

@Grubba27
Created June 2, 2022 14:31
Show Gist options
  • Select an option

  • Save Grubba27/cf08d4dd047e57f382e9400c80bec43b to your computer and use it in GitHub Desktop.

Select an option

Save Grubba27/cf08d4dd047e57f382e9400c80bec43b to your computer and use it in GitHub Desktop.
Range in typelevel
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