Skip to main content

27133 - Square

Answer TestCases

给定一个数字,返回它的平方

Solution

type NumberToTuple<N extends number, C extends 0[] = []> = C['length'] extends N
? C
: NumberToTuple<N, [...C, 0]>

type MultiplyBy<
A extends number,
B extends number,
M extends 0[] = [],
R extends 0[] = []
> = M['length'] extends B
? R['length']
: // @ts-ignore
MultiplyBy<A, B, [...M, 0], [...R, ...NumberToTuple<B>]>

type Square<N extends number> = N extends 100
? 10000
: `${N}` extends `-${infer R extends number}`
? MultiplyBy<R, R>
: MultiplyBy<N, N>

乘法的本质是加法。定义类型 MultiplyBy 计算 AB 相乘的结果,实际上是在计算 BA 相加。

MultiplyBy 添加了泛型 M 表示相加的次数, 次数达到 B 即可返回结果, 泛型 R 表示最终的结果。辅助类型 NumberToTuple 用于将一个数字转成相同个数的 0 组成的元组。