type 和interface 异同?

83 阅读1分钟

1.给类型取别名

别名可以是联合类型

type UserList = Array<User|Account>;
​
let userList:UserList =[
    {name:'xxx',age:44},
    {account:'xxxxx',password:'xxxxxx'},
]

2.顶替interface 定义对象类型

interface 定义对象类型

interface User{
    name:string,
    age:number
}
let user:User = {name:'xxx',age:444};

type 定义对象类型

type User ={
    name:string,
    age:number
}
let user:User = {name:'xxx',age:444};

3.interface 可以进行类型的自动合并 type不行

interface 进行类型的自动合并

interface User{
    name:string,
    age:number
}
interface User{
    like:Array<string>
}
let user:User = {name:'xx',age:40,like:['x','xxx','xxx']}

type 不能进行类型的自动合并

type User={
    name:string,
    age:number
}
type User={   //报错 相同别名的类型冲突
    like:Array<string>
}
let user:User = {name:'xx',age:40,like:['x','xxx','xxx']}
​

总结

相同:

  • interface 和 type 都可以 给 对象或函数 定义类型

不同:

  • interface 支持多个相同类型名的类型自动合并,type不支持相同类型的合并
  • type 可以给 复杂的类型 取别名,方便以后多次使用,简化代码, interface 不支持去别名