题目描述
实现一个接收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 =============
type Absolute<T extends number | string | bigint> =
`${T}` extends `-${infer U}`
? U
: `${T}`;
类型约束
使用T extends number | string | bigint对类型T进行约束,确保T是number或string或bigint类型
条件类型
type Absolute<T extends number | string | bigint> =
`${T}` extends `-${infer U}`
? U
: `${T}`;
-
将
T转换为字符串:${T}:将T转换为字符串
-
条件判断:
-
${T}extends-${infer U}:-
如果
${T}是一个负数字符串(以-号开头),则将-号后面的内容推断为类型U -
返回
U
-
-
否则,返回
${T}
-