Typescript

any、unknown 与 never

  • any,unknown在ts类型层级中属于最顶层top type,也就意味着所有类型都是它两的子类型,never相反,作为bottom type它是所有类型的子类型
  • 为什么需要top type和bottom type:在实际开发中,我们不可能确保对所有地方的类型都能精准描述,因此需要一个top type来表示一个包含任意类型的类型

type和interface的区别

  • 在对象扩展情况下,interface使用extends关键字,而type使用交叉类型&
  • 同名的interface会自动合并,并在合并时要求兼容原接口的结构
  • interface和type都可以描述对象类型,函数类型,class类型,但interface无法像type那样表达元组,一级联合类型等
  • interface无法用映射类型等类型工具,也就意味着在类型编程场景我们还是用type

更优回答

  • interface就是描述对象对外暴露的接口,其不应该具有过于复杂的类型逻辑,最多局限于泛型约束与索引类这个层面
  • type alias就是用于将一组类型的重命名,或者对类型进行复杂编程

工具类型的实现

type Partial<T extends objecet> = {
  [K in keyof T]?: T[K]
}
Updated on 6/12/2023