交叉类型

交叉类型 = 交集

  • 不存在相同属性
interface P1 {
  handsome: string
}
interface P2 {
  high: string
}
type P3 = P1 & P2 // 交叉的部分都有
let person3: P3 = {
  handsome: "shuai",
  high: '高'
}
  • 存在相同属性但是属性类型不一致
interface P4 {
  name: string
}
interface P5 {
  name: number
}
type P6 = P4 & P5
function fn(): never {
  throw new Error('')
}
let person6: P6 = {
  name: fn()
}
  • 存在相同属性和不用属性,相同属性类型一致
interface P7 {
  a: string,
  b: number
}
interface P8 {
  b: number,
  c: string
}
type P9 = P7 & P8
let person9: P9 = {
  a: 'a',
  b: 2,
  c: 'c'
}
  • 交叉类型与泛型共同使用
interface a {
  a: number
}
interface b {
  b: string
}
function minix<T extends object, K extends object>(obj1: T, obj2: K): T & K {
  return { ...obj1, ...obj2 }
}
let mix1 = minix({ a: 's' }, { b: 'b' })
let mix2 = minix({ a: 1 }, { b: 'b' })
let mix3 = minix({ a: 's' }, { b: 1 })
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容