正数字符串
题目
Github: Absolute
实现一个接收 string
, number
或 bigInt
类型参数的 Absolute
类型,返回一个 正数字符串。
type Test = -100;
type Result = Absolute<Test>; // expected to be "100"
解题思路
将一个负数转为正数的方法,很容易想到就是直接把负号 -
去掉,因此,可以使用模板字面量来实现。
首先将 T
转为字符串,然后判断是否该字符串是否以 -
字符开始。 如果是,就去掉 -
字符,否则返回原字符串。
答案
type Absolute<T extends number | string | bigint> =
`${T}` extends `-${infer R}` ? R : `${T}`
验证
type cases = [
Expect<Equal<Absolute<0>, '0'>>,
Expect<Equal<Absolute<-0>, '0'>>,
Expect<Equal<Absolute<10>, '10'>>,
Expect<Equal<Absolute<-5>, '5'>>,
Expect<Equal<Absolute<'0'>, '0'>>,
Expect<Equal<Absolute<'-0'>, '0'>>,
Expect<Equal<Absolute<'10'>, '10'>>,
Expect<Equal<Absolute<'-5'>, '5'>>,
Expect<Equal<Absolute<-1_000_000n>, '1000000'>>,
Expect<Equal<Absolute<9_999n>, '9999'>>,
]