交叉类型(&):功能类似于继承(extends),用于组合(联合)多个类型为一个类型常用于对象类型
interface Person {
name:string
}
interface Contact {
phone:string
}
type PersonDetail = Person & Contact
let p: PersonDetail = {
name:'帅哥', phone:'苹果'
}
使用了交叉类型后相当于PersonDetail同时具备了Person和Contact的所有属性类型
type PersonDetail = { name: string ; phone: string }
交叉类型与接口继承的对比
相同点:都可以实现对象类型的组合。
不同点:两种类型实现类型组合时,对于同名属性之间,处理类型冲突的方式不同
在接口继承中会报错(类型不兼容)
// 接口继承
interface A {
fn:(value:string) => string
}
interface B extends A { // 报错 属性“fn”的类型不兼容。
fn:(value:number) => string
}
交叉类型没有报错
相当于时fn:(value: string | number) => string
// 交叉类型
interface A {
fn:(value:string) => string
}
interface B {
fn:(value:number) => string
}
type C = A & B