Skip to content

Instantly share code, notes, and snippets.

@mscolnick
Created March 15, 2021 04:06
Show Gist options
  • Save mscolnick/caedab6a46ab755c2d096522eb6e1f03 to your computer and use it in GitHub Desktop.
Save mscolnick/caedab6a46ab755c2d096522eb6e1f03 to your computer and use it in GitHub Desktop.
// number -> array
type ArrayOfSize<N extends number> = N extends N ? (number extends N ? boolean[] : _ArrayOfSize<N, []>) : never;
type _ArrayOfSize<N extends number, R extends unknown[]> = R['length'] extends N ? R : _ArrayOfSize<N, [true, ...R]>;
// verify
type A = ArrayOfSize<3>; // [true, true, true]
type B = ArrayOfSize<1>; // [true]
type C = ArrayOfSize<0>; // []
// array -> number
type AP = A['length']; // 3
type BP = B['length']; // 1
type CP = C['length']; // 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment