-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
Description
题目
实现 Absoulte
类型,接收 string
、number
、bigint
类型,返回一个整数字符串
import type { Equal, Expect } from "@type-challenges/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">>
];
答案
下面三个方法的思路都是一样的
bigint
和number
类型通过${T}
可以变成string
类型1_000_000n
="1000000"
- 把负数变成正数
-{infer S}
,S
就是正数
方法一
type ToString<T extends string | number | bigint> = `${T}`;
type Absolute<T extends string | number | bigint> =
ToString<T> extends `${infer P}${infer S}`
? P extends "-"
? S
: ToString<T>
: ToString<T>;
方法二
type ToString<T extends string | number | bigint> = `${T}`;
type Absolute<T extends string | number | bigint> = T extends string
? T extends `-${infer S}`
? S
: T
: Absolute<ToString<T>>;
方法三
type ToString<T extends string | number | bigint> = `${T}`;
type Absolute<T extends string | number | bigint> =
ToString<T> extends `-${infer S}` ? S : ToString<T>;