这些语句(接口vs类型)有什么区别?
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
2021年3月更新:较新的TypeScript手册有一节接口vs.类型别名解释了差异。
原答案(2016年)
根据(现已存档的)TypeScript语言规范:
接口声明总是引入命名对象类型,与此不同,类型别名声明可以为任何类型引入名称,包括基元、联合和交集类型。
该规范接着提到:
接口类型与对象类型文字的类型别名有许多相似之处,但由于接口类型提供了更多的功能,因此通常首选它们而不是类型别名。例如,接口类型
interface Point {
x: number;
y: number;
}
可以写成类型别名
type Point = {
x: number;
y: number;
};
但是,这样做意味着丧失了以下功能: