Skip to content

正数字符串

约 297 字小于 1 分钟

2022-12-01

题目

Github: Absolute

实现一个接收 string, numberbigInt 类型参数的 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'>>,
]

参考