TS 进阶 - 高频面试题

2023-05-17 20:40:21 浏览数 (2)

# interface 与 type 的异同点

  • 基础
    • 在对象扩展情况下,interface 使用 extends 关键字,type 使用交叉类型 (&)
    • 同名的 interface 会自动合并,并且在合并时会要求兼容原接口的结构
    • interfacetype 都可以描述对象类型、函数类型、Class 类型,但 interface 无法像 type 那样表达元组、一组联合类型等
    • interface 无法使用映射类型等类型工具,即在类型编程场景中应该使用 type
    • interface 来定义对象,用类型别名来处理函数签名、联合类型、工具类型等等
  • 进阶
    • interface 就是描述对象对外暴露的接口,不应该具有过于复杂的类型逻辑,最多局限于泛型约束和索引类型
    • 类型别名(type)用于将一组类型重命名,或者对类型进行复杂编程
    • 在对象扩展时,使用接口继承要比交叉类型性能更好

# 类型兼容比较

  • 基础
    • TypeScript 使用鸭子类型,即结构化类型系统进行类型兼容性比较
      • 对于两个属性完全一致的类型,就认为它们属于同一种类型
    • 对于 A 类型、A B 类型,认为后者是前者的子类型,(A B 比 A 更多信息)
    • 对于 object {} 和 Top Type 存在部分特殊规则
  • 进阶
    • 结构化类型系统到标称类型系统
    • 类型层次
      • 类型兼容性的比较本质上也是在类型层次中进行比较,一个类型能兼容其子类型

# any、unknown 与 never

  • 基础
    • anyunknown 在 TypeScript 类型层级中属于最顶层的 Top Type,即所有类型都是其子类型
    • never 作为 Bottom Type 是所有类型的子类型
  • 进阶
    • 为什么需要 Top Type 和 Bottom Type
      • 不能保证对所有地方的类型都进行精确描述,所以需要 Top Type 来表示一个包含任意类型的类型
      • 在类型编程中,如果对两个不存在交集的类型强行进行交集运算,需要一个类型描述这种不存在的类型,所以需要 Bottom Type
    • 类型层级
      • 从 Bottom 向上到 Top 的类型链
    • 条件类型
      • 在条件类型中存在对于 Bottom Type 和 Top Type 的特殊处理

# 工具类型实现

  • 基础
    • PartialRequired
    • PickOmit
    • ReturnTypeParameterType
  • 进阶
    • DeepPartialDeepRequired
    • MarkAsPartialPickByType
    • 工具类型分类
      • 访问性修饰工具类型
      • 结构处理工具类型
      • 集合工具类型
      • 模式匹配工具类型

0 人点赞