跳到主要内容

type 与 interface 的区别

type 和 interface 各能声明什么?​

  • interface: 声明对象形状与类的契约;
  • type: 除对象外, 还能声明联合类型、交叉类型、元组类型等类型别名;

两者在合并、继承与物理存在上有什么差异?​

维度interfacetype
声明对象对象、类接口、联合类型、交叉类型、元组类型
合并性多次声明同名 interface 会自动合并多次声明同名 type 会报错
约束与继承可约束对象/函数, 也可继承与被继承无法约束和继承
物理存在实际存在一种类型只是若干类型的别名, 无实际存在

应该如何选择?​

  • 默认: 优先使用 interface;
  • 需要联合类型、交叉类型、元组类型或条件类型时, 改用 type;
  • 依赖声明合并 (如扩展第三方库类型) 时必须用 interface;