1. 定义/使用范围方式
- type:使用
type关键字定义,为任何类型创建一个新的名字,不仅限于对象类型,还可以用于基本类型、联合类型、元组、交集等。 - interface:使用
interface关键字定义,专门用于定义对象的接口,包括对象的属性、方法等。尽管在某些情况再也可以用于描述函数。但是主要还是对象结构的定义
2. 继承方式不同
- type:可以通过交叉类型(&)来实现类似继承的思想,但是本身不具有继承的语法,另外,
type还可以继承interface,反之亦然 - interface:通过
extends关键字来实现继承,支持多继承,即一个接口可以继承多个接口,也可以继承多个type
3. 声明合并的支持
- type:不支持声明合并,即如果同一类型名称定义多个
type,将会导致导致重复定义的警告 - interface:支持声明合并,即如果同一接口名称声明了多个
interface,他们会合并成为一个接口
4. typeof的使用
-
type 语句中还可以使用
typeof获取实例的类型进行赋值 -
interface 不能使用
typeof说明:
typeof关键字主要用于获取一个值的运行时类型标签,但它并不直接与interface相关
5. 使用场景
- 一般情况下,如果能用
interface实现,就优先使用interface,因为它扩展起来更方便,提示也更友好 。适用于定义对象结构类型和需要进行声明合并的场景。 - 如果需要定义复杂类型,或者需要使用
typeof获取实例的类型进行赋值,就使用type