交叉类型

2024-02-14  本文已影响0人  0说
// 交叉类型 & 
interface OneType {
  age: number
}
interface TwoType {
  name: string
}

type ThreeType = OneType & TwoType
// 使用交叉类型后,新的类型 ThreeType就同时具备了OneType 和 TwoType 的所有属性类型
let obj: ThreeType = {
  age: 15,
  name: 'james'
}
console.log(obj)

// 交叉类型(&)和接口继承(extends)的对比:

// 相同点:都可以实现对象类型的组合。
// 不同点:两种方式实现类型组合时,对于同名属性之间,处理类型冲突的方式不同
interface Ttype {
  fn(f: number): void
}
interface Ytype {
  fn(f: string): void
}
interface Stype extends Ttype {  //报错:接口“Stype”错误扩展接口“Ttype”。 属性“fn”的类型不兼容
  fn(f: string): void
}

type Btype = Ttype & Ytype // 不会报错 这里的整合相同属性参数 Btype = { fn(f: string | number): void }
const aObj:Btype = {
  fn(f) {
    console.log(f)
  }
}
aObj.fn('a')
aObj.fn(5)
aObj.fn(false) // 报错

上一篇 下一篇

猜你喜欢

热点阅读