交叉类型
交叉类型(&):功能类似于接口继承(extends),用于组合多个类型为一个类型(常用于对象类型)。
// 定义对象类型
type User = {
name: string
hobby(): string
}
type Phone = {
phone: string
}
// 定义交叉类型
type UserDetail = User & Phone
// 使用
let user: UserDetail = {
name: 'jack',
phone: '13312341234',
hobby() {
return '学习'
}
}
交叉类型(&)和接口继承(extends)的对比:
相同点:都可以实现对象类型的组合。
不同点:两种方式实现类型组合时,对于同名属性之间,处理类型冲突的方式不同。
interface A {
fn: (value: number) => string
}
interface B {
fn: (value: string) => string
}
// 交叉类型
type C = A & B
let c: C = {
fn(value: number | string) {
return ''
}
}
c.fn(1)
c.fn('a')
// 继承
interface E {
fn: (value: number) => string
}
interface F extends E { // 函数参数类型不兼容 --报错
fn: (value: string) => string
}
继承时类型不兼容报错提示
调用时会有类型提示