【TypeScript】类型兼容(协变、逆变和双向协变)

类型兼容,就是用于确定一个类型是否能赋值给其他的类型。如果A要兼容B 那么A至少具有B相同的属性。

简单来说就是为了保证类型安全。

// 主类型
interface A {
    name: string,
    age: number
}

// 子类型
interface B {
    name: string,
    age: number,
    sex: string
}

let a: A = {
    name: "睁眼看世界",
    age: 18
}
let b: B = {
    name: "她都显怀了你还没释怀",
    age: 18,
    sex: "男"
}
// a 的类型是少的 所以把多的类型给少的 一定能保证 a 的类型都有赋值 是安全的
a = b // 协变 B是A的子类型,所以可以赋值

let fnA = (params: A) => {
}
let fnB = (params: B) => {
}

// 这里函数参数传值 调用哪个函数 哪个函数就需要接收值 
// 而接收的值一定是类型多的 这样才能保证新的 少的参数赋值后 的每一个参数类型安全
fnB = fnA // 逆变 A的类型化少 B的类型化多,所以可以赋值

fnA = fnB // 双向协变 需要开启 --strictFunctionTypes: false

image.png

类型兼容的主旨就是为了保证类型安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秀秀_heo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值