挑战
实现一个接收 string, number 或 bigInt 类型参数的Absolute类型,返回一个正数字符串。
例如
type Test = -100;
type Result = Absolute<Test>; // expected to be "100"解答
这道题最开始想通过操作数字的方式实现,但想不到什么好的操作方式。后来看题目也接收 string,就想着用操作字符串的方式处理。
具体思路是通过推断得到第一个字符,判断它是不是 -,是的话返回剩余的部分,不是的话直接返回原字符串。
type Absolute<T extends number | string | bigint> =
T extends `${infer F}${infer R}` ? (F extends '-' ? R : T) : never;当然也可以简化一下:
type Absolute<T extends number | string | bigint> = T extends `-${infer R}`
? R
: T;但是现在处理不了 T 是数字的情况。所以我们需要把数字转成字符串,只需要把 T 包裹在字面量类型中。
所以最终实现为:
type Absolute<T extends number | string | bigint> = `${T}` extends `-${infer R}`
? R
: `${T}`;