# 10969-整数
# 题目描述
请完成类型 Integer<T>
,类型 T
继承于 number
,如果 T
是一个整数则返回它,否则返回 never
。
# 分析
这题可以先看点用例:
let x = 1;
let y = 1 as const;
type cases1 = [
Expect<Equal<Integer<1>, 1>>,
Expect<Equal<Integer<1.1>, never>>,
Expect<Equal<Integer<1.0>, 1>>,
Expect<Equal<Integer<typeof x>, never>>,
Expect<Equal<Integer<typeof y>, 1>>,
];
可以看出,此题除了需要支持常量 number 是否是整数的判断,还需要支持 number 类型本身的判断。其中 number 可以作为特殊情况优先判断。
而是否判断一个数字是否是整数,只需要判断是否包含小数点即可,其实 和 5140-Trunc 一样,都是借助字符匹配的方式去匹配小数点即可。
# 题解
type Integer<T extends number> =
// 排除 number 类型的影响
number extends T
? never
: // 匹配小数点
`${T}` extends `${infer F}.${infer L}`
? // 有小数点,则返回 never
never
: T;
# 知识点
- 数字转字符
- 字符匹配的套路