type PrependNextNum> = A['length'] extends infer T ? ((t: T, ...a: A) => void) extends ((...x: infer X) => void) ? X : never : never; type EnumerateInternal, N extends number> = { 0: A; 1: EnumerateInternal, N>; }[N extends A['length'] ? 0 : 1]; export type Enumerate = EnumerateInternal<[], N> extends (infer E)[] ? E : never; export type Range = Exclude, Enumerate>; export {};