1.语法:
- interface:使用
interface
关键字来定义接口。 -
interface Person { name: string age:number }
- type:使用
type
关键字来定义类型别名。 -
type Person = { name:string age:number }
2.对象类型的描述
- interface:可以描述对象的结构,包括属性、方法和索引签名等。接口可以被实现(implements)。
- type:可以描述对象的结构,包括属性、方法和索引签名等。类型别名不能被实现。
3.类型合并
- interface:可以多次声明同一个接口,并且会自动合并接口中相同名称的成员。
- type:不支持声明合并。
4.对于其他类型的描述
- interface:主要用于描述对象类型,虽然可以描述函数类型,但不能直接描述基本类型、联合类型等。
- type:可以描述对象类型、基本类型、联合类型、交叉类型、元组等。
5.继承和实现
- interface:可以通过继承其他接口来扩展自身,使用
extends
关键字。 - type:不支持直接的继承,但可以使用交叉类型(Intersection Types)来合并多个类型。
总的来说,interface和type在某些方面有相似的功能,但它们也有一些区别。一般来说,当你要描述对象的结构和行为时,优先选择使用interface,当你需要使用联合类型、交叉类型等高级类型时,或者需要给现有类型起一个别名时,可以使用type来定义类型别名。