Absolute
问题描述
实现一个接收string,number或bigInt类型参数的Absolute类型,返回一个正数字符串。
例如
type Test = -100;
type Result = Absolute<Test>; // expected to be "100"
// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'
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'>>,
]
// ============= Your Code Here =============
// 答案1
type DealNumber<T extends string>=T extends `-${infer R}`?R:T
type Absolute<T extends number | string | bigint> =T extends string?DealNumber<T>:DealNumber<`${T}`>
// 答案2
type Absolute<T extends number | string | bigint> = `${T}` extends `-${infer U}` ? U : `${T}`
这里通过实验发现,bigint 类型的数据加上字符串之后,直接变为了数字类型的字符串,比如 -1_000_000n 加上模板字符串之后,'${-1_000_000n}' ,直接变为了 '1000000',所以只需要将 string 类型的字符串单独判断即可。或者可以使用更精简的方式,如答案2。