交叉类型 = 交集
- 不存在相同属性
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 })