7. 交叉类型

71 阅读1分钟

交叉类型(交集) 按位与

interface Person1{
    handsome:boolean
}
interface Person2{
    height:number
}
type handsomeAndHeigh = Person1 & Person2

let p: handsomeAndHeigh = {
    handsome: true,
    height:180
}

如果两个类型不相同,没有交集,&之后的结果是 never

// 类型冲突 就是 never 类型
interface Person1{
    handsome:boolean
}
interface Person2{
    handsome:string
}
type handsomeAndHeigh = Person1 & Person2  // never

let p: handsomeAndHeigh = {
    handsome: true, // 不能将类型“boolean”分配给类型“never”
}

合空的交叉仍然是它本身

type a = ('number' | 'string') & {} // "string" | "number"
  • 快速扩展属性
let obj = {
    name: 'zhangsan',
    age: 18
}
let person: { name: string, age: number, address: string } = obj as typeof obj & { address: string }