TypeScript 中的逆变、协变和双向协变

前言

为什么需要引入逆变、协变和双向协变这些概念

因为考虑到类型兼容,详情参考https://www.typescriptlang.org/docs/handbook/type-compatibility.html

在 TypeScript 中,有两种兼容性机制:子类型和赋值 (意思是理解成在子类型和赋值这种操作下才会触发兼容性,比如比较该类型是不是其子类型)

出于实际目的,类型兼容性由赋值兼容性决定,即使在implements and extends子句的情况下也是如此

基础

TypeScript中的类型兼容性可以用于确定一个类型是否可以赋值给其他类型。这里要了解两个概念:

官方文档说到TS 是结构性的类型系统(Type compatibility in TypeScript is based on structural subtyping. Structural typing is a way of relating types based solely on their members. This is in contrast with nominal typing. Consider the following code)

  • 结构类型:一种只使用其成员来描述类型的方式(类型 ducking type);

  • 名义类型:明确的指出或声明其类型,如c#,java。

TypeScript的类型兼容性就是基于结构子类型的。下面的例子:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值