区别1:定义类型范围不同
interface 只能定义对象类型或者接口当名字的函数类型
type可以定义任何类型包括基础类型、联合类型、交叉类型、元组
// 定义基础类型
type num = number
// 定义联合类型
type baseType = string | boolean | number
// 定义交叉类型
interface Cat {
name: string
}
interface Dog {
color: string
age: number
}
type Pet = Cat & Dog
// 定义元组类型
type NewPet = [Cat, Dog]
区别2:接口可以extends一个或者多个接口(逗号分割)或者类实现一个或者多个接口,也可以继承type类型,type类型没有继承功能,一般接口继承类和type比较少见
区别3:用type交叉类型&可以让类型中的成员合并成一个新的type 类型,但接口不能交叉合并
区别4:接口可以合并声明,也就是定义相同名称的接口会合并声明不过如果有相同的属性会编译错误
interface Errror {
msg: string
}
interface Errror {
code: Number
}
// 接口合并
let err: Errror = {
msg: "没有权限",
code: 403
}