相同点
都可以描述一个对象或者函数
interface
1 2 3 4 5 6 7
| interface User { name: string age: number } interface SetUser { (name: string, age: number) : void }
|
type
1 2 3 4 5
| type User { name: string age: number } type SetUser = (name:string, age: number) => void
|
都允许拓展(extends
)
interface
和 type
都可以扩展,并且两者并不是相互独立的,也就是说 interface
可以 extends
type
,type
也可以 extends
interface
。虽然效果差不多,但是两者语法不同。
interface extends type
1 2 3 4 5 6
| type Name = { name: string; } interface User extends Name { age: number }
|
type extends interface
1 2 3 4 5 6
| interface Name { name: string; } type User = Name & { age: number }
|
不同点
type 可以而 interface 不行
type 可以声明基本类型别名,联合类型,元组等类型
1 2 3 4 5 6 7 8 9 10 11 12 13
| type Name = string
interface Dog { wong() } interface Cat { miao() } type Pet = Dog | Cat
type PetList = [Dog, Pet]
|
type 语句中还可以使用 typeof 获取实例的类型进行赋值
1 2 3
| let div = document.createElement('div') type B = typeof div
|
interface 可以而 type 不行
interface 能够声明合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| interface User { name: string age: number }
interface User { sex: string }
|
总结
一般来说,如果不清楚什么时候用interface/type,能用 interface 实现,就用 interface , 如果不能就用 type 。