提问者:小点点

TypeScript:接口与类型


这些语句(接口vs类型)有什么区别?

interface X {
    a: number
    b: string
}

type X = {
    a: number
    b: string
};

共1个答案

匿名用户

2021年3月更新:较新的TypeScript手册有一节接口vs.类型别名解释了差异。

原答案(2016年)

根据(现已存档的)TypeScript语言规范:

接口声明总是引入命名对象类型,与此不同,类型别名声明可以为任何类型引入名称,包括基元、联合和交集类型。

该规范接着提到:

接口类型与对象类型文字的类型别名有许多相似之处,但由于接口类型提供了更多的功能,因此通常首选它们而不是类型别名。例如,接口类型

interface Point {
    x: number;
    y: number;
}

可以写成类型别名

type Point = {
    x: number;
    y: number;
};

但是,这样做意味着丧失了以下功能:

  • <罢工> 接口可以在extends或implements子句中命名,但对象类型文本的类型别名不能 自TS 2.7起不再为真。
  • 接口可以有多个合并声明,但对象类型文字的类型别名不能。