基本使用方法
功能类似于接口继承,用于组合多个类型为一个类型
interface Person {name:string}
interface Contact {phone:string}
type personDetail = Person & Contact
let obj: PersonDetail = {
name:'jack'
phone:'123'
}
使用交叉类型后,新的PersonDetail具有了Person和Contact的所有属性
相当于
type PersonDetail = {name:string;phone:string}
交叉类型与接口继承的联系与区别
相同点:都可以实现对象类型的组合
不同点:两种方式实现类型聚合时,对于同名属性之间,处理冲突的方式不同
//对于接口继承
interface A {
fn: (value:number)=>string
}
//interface B extends A{ /*报错:类型不兼容*/
// fn: (value:string)=>string
//}
//对于交叉类型
interface A {
fn: (value:number)=>string
}
interface B extends A{
fn: (value:string)=>string
}
type C = A & B
//相当于吧fn变为fn:(value: string|number) => string