2026.01.01

我与多数人认定的不同

interface & type 区别

这是一个典型的问题,当然可以像八股一样去回答:

  • 在对象结构扩展的情况下,interface 使用 extends 关键字,type 使用交叉类型 &
  • 同名的 interface 会声明合并
  • interface 可以被 implements 实现
  • interface 不能像 type 一样表达基本数据类型、元组、联合类型

但更重要的是理解两者的设计初衷和使用场景。

interface 的设计初衷

interface 源于面向对象编程,目的是行为抽象的总结。因此,接口本就是用来描述对象结构的,所以在对象的扩展时使用的是 extends 关键字。

type 的设计初衷

type 只是一个别名,与面向对象无关。它只是使用交叉类型模拟了继承关系,实现对象的结构扩展。


正因为是面向对象,对于接口的声明应该是抽象的描述,而不应该有复杂的逻辑运算。所以:

  • interface 不能描述联合类型,也不应该在接口中处理类型逻辑
  • 类型别名则没有这些限制,要做类型运算的话,首选肯定是 type

面向对象是对结构的设计,接口可能是要对外暴露的,所以接口有声明合并的特性。如果设计第三方库的话,就会考虑到使用者是否要扩展,那就需要声明为接口。