Created
March 20, 2024 10:18
-
-
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
This file contains 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
// 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