2026.01.01
我与多数人认定的不同
interface & type 区别
这是一个典型的问题,当然可以像八股一样去回答:
- 在对象结构扩展的情况下,
interface使用extends关键字,type使用交叉类型& - 同名的
interface会声明合并 interface可以被implements实现interface不能像type一样表达基本数据类型、元组、联合类型
但更重要的是理解两者的设计初衷和使用场景。
interface 的设计初衷
interface 源于面向对象编程,目的是行为抽象的总结。因此,接口本就是用来描述对象结构的,所以在对象的扩展时使用的是 extends 关键字。
type 的设计初衷
type 只是一个别名,与面向对象无关。它只是使用交叉类型模拟了继承关系,实现对象的结构扩展。
正因为是面向对象,对于接口的声明应该是抽象的描述,而不应该有复杂的逻辑运算。所以:
- interface 不能描述联合类型,也不应该在接口中处理类型逻辑
- 类型别名则没有这些限制,要做类型运算的话,首选肯定是
type
面向对象是对结构的设计,接口可能是要对外暴露的,所以接口有声明合并的特性。如果设计第三方库的话,就会考虑到使用者是否要扩展,那就需要声明为接口。