type 与 interface 的区别
type 和 interface 各能声明什么?
interface: 声明对象形状与类的契约;type: 除对象外, 还能声明联合类型、交叉类型、元组类型等类型别名;
两者在合并、继承与物理存在上有什么差异?
| 维度 | interface | type |
|---|---|---|
| 声明对象 | 对象、类 | 接口、联合类型、交叉类型、元组类型 |
| 合并性 | 多次声明同名 interface 会自动合并 | 多次声明同名 type 会报错 |
| 约束与继承 | 可约束对象/函数, 也可继承与被继承 | 无法约束和继承 |
| 物理存在 | 实际存在一种类型 | 只是若干类型的别名, 无实际存在 |
应该如何选择?
- 默认: 优先使用
interface; - 需要联合类型、交叉类型、元组类型或条件类型时, 改用
type; - 依赖声明合并 (如扩展第三方库类型) 时必须用
interface;