(1)type
能够表示非对象类型,而interface
只能表示对象类型(包括数组、函数等)。
(2)interface
可以继承其他类型,type
不支持继承。
(3)同名interface
会自动合并,同名type
则会报错。也就是说,TypeScript 不允许使用type
多次定义同一个类型。
(4)interface
不能包含属性映射(mapping),type
可以,详见《映射》一章。
(5)this
关键字只能用于interface
。
(6)type 可以扩展原始数据类型,interface 不行。
(7)interface
无法表达某些复杂类型(比如交叉类型和联合类型),但是type
可以。