交叉类型
类似接口继承,用于组合多个类型为一个类型 - 常用于对象类型
新的类型 同事具备组合多个类型的所有属性
例子
interface Person1 {
name: string
}
interface Contact {
phone: number
}
type newAA = Person1 & Contact
let a: newAA = { name: '11', phone: 12434 }
交叉类型和接口继承的对比
相同点:都可以实现对象类型的组合
不同点:两种方式实现类型组合,存在同名属性当类型不同时,接口继承会报错-类型不兼容;而叉类型不会,属性会变成可以有两种不同的类型
例子1
interface A {
value: string
}
interface B {
value: number
}
type C = A & B
let c: C
c.value
//以上写法会将value变成never类型-never即永远达不到类型,即不可能是字符串的同时又是数字
例子二
interface A {
fn: (value: string) => string
}
interface B {
fn: (value: number) => string
}
type C = A & B
let c: C = {
fn: (value) => {
return value.toString()
}
}
// value可以是string也可以是number
console.log(c.fn(1))
console.log(c.fn('sdasdafss'))