# 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;

# 知识点

  1. 数字转字符
  2. 字符匹配的套路
Last Updated: 2023/5/16 06:00:28