【TypeScript 高级应用】type和interface的区别

2023/03/07 15:09:04

interface 创建了一个新的名字,可以在其他任何地方使用;用 type 设置类型别名时不会新建一个类型,而是创建一个新名字来引用那个类型。

在下面的示例代码里,在编译器中将鼠标悬停在 interfaced 上,显示它返回的是 Interface,但悬停在 aliased 上时,显示的却是对象字面量类型。

type Alias = { num: number };
interface Interface {
  num: number;
}
declare function aliased(arg: Alias): Alias;
declare function interfaced(arg: Interface): Interface;

另一个重要区别是类型别名不能被 extends 和 implements(自己也不能 extends 和 implements 其它类型)。 因为软件中的对象应该对于扩展是开放的,但是对于修改是封闭的,你应该尽量去使用接口代替类型别名。