Skip to content

Instantly share code, notes, and snippets.

@keyurparalkar
Created March 20, 2024 10:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save keyurparalkar/93909e25d1207c21823518550945d3eb to your computer and use it in GitHub Desktop.
Save keyurparalkar/93909e25d1207c21823518550945d3eb to your computer and use it in GitHub Desktop.
Generic to find the square of a number. Based on this TS challenge: https://github.com/type-challenges/type-challenges/blob/main/questions/27133-medium-square/README.md
// Generates array from 0 to N (inclusive)
type GenerateArr<N extends number, Acc extends number[] = []> = Acc['length'] extends N
? Acc
: GenerateArr<N, [...Acc, Acc['length']]>
type FlattenArr<A extends unknown[]> = A extends [infer X extends number[], ...infer R] ? [...X, ...FlattenArr<R>] : A;
type AbsoluteSquare<N extends number, Acc extends unknown[] = []> =
Acc['length'] extends N
? FlattenArr<Acc>['length']
: AbsoluteSquare<N, [...Acc, GenerateArr<N>]>
type Square<N extends number> = `${N}` extends `-${infer NonNegNum extends number}`
? AbsoluteSquare<NonNegNum>
: AbsoluteSquare<N>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment