TypeScript --- 交叉类型( & )

78 阅读1分钟

交叉类型(&):功能类似于继承(extends),用于组合(联合)多个类型为一个类型常用于对象类型

interface Person {
  name:string
}
interface Contact {
  phone:string
}

type PersonDetail = Person & Contact

let p: PersonDetail = {
  name:'帅哥', phone:'苹果'
}

使用了交叉类型后相当于PersonDetail同时具备了PersonContact的所有属性类型

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