交叉类型(交集) 按位与
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 }