Typescript:接口与types

这些语句(接口和types)有什么区别?

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

根据TypeScript语言规范 :

与总是引入命名对象types的接口声明不同,types别名声明可以为任何types的types(包括基本types,联合types和交集types)引入一个名称。

规范继续提到:

接口types与对象types文字的别名types有很多相似之处,但是由于接口types提供了更多的function,所以他们通常更喜欢键入别名。 例如,接口types

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

可以写成types别名

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

但是,这样做意味着以下function会丢失:

  • 一个接口可以在extends或implements子句中命名,但是一个对象typesliteral的types别名不能。
  • 一个接口可以有多个合并的声明,但是一个对象types文字的types别名不能。

https://www.typescriptlang.org/docs/handbook/advanced-types.html

一个区别是接口创build一个在任何地方都使用的新名称。 types别名不会创build新名称 – 例如,错误消息不会使用别名。