typeScript学习-interface和type 区别
typeScript学习
interface(接口) 和 type 区别
type 和接口类似,都用来定义类型,但 type 和 interface 区别如下:
区别1:定义类型范围不同
interface 只能定义对象类型或接口当名字的函数类型。
type 可以定义任何类型,包括基础类型、联合类型、交叉类型,元组。
// type 定义基础类型 type num = number // type 定义联合类型-示例1 type baseType = string | number | symbol // type 定义联合类型-示例2 interface Car { brandNo: String } interface Plane { No: string, brandNo: String } type TypVechile = Car | Plane let vechile1: TypVechile = { brandNo: "奔驰" } let vechile2: TypVechile = { brandNo: "宝马", No: "AB1001" } // 元组 interface Car2 { brandNo: String } interface Plane2 { No: string, brandNo: String } type TypVechile2 = [Car2, Plane2]
区别2:
接口可以 extends(继承) 一个或多个接口或类实现一个或多个接口,也可以继承 type,但 type 类型没有继承功能,
但一版接口继承 类 和 type 的应用场景很少见。
区别3:
用 type 交叉类型 & 可让类型中的成员合并成一个新的 type 类型,但接口不能交叉合并
type Group = { groupName: string, memberNum: number } type GroupInfoLog = { info: string, happen: string } type GroupMemeber = Group & GroupInfoLog // type 交叉类型 let data: GroupMemeber = { groupName: '001', memberNum: 10, info: '爬山', happen: '有惊无险' } export { }
区别4:接口可合并声明
定义两个相同名称的接口会合并声明,定义两个同名的 type 会出现编译错误。
interface Error { name: string } interface Error { message: string, stack?: string } // 接口合并 let error: Error = { message: '空指针', name: 'NullPointException' }