协变(Covariance)
假如有以下两个类型:
class 动物 {}
class 狗: 动物 {}
类狗
继承类动物
,那么狗
可以隐式转换为动物
,我们称为狗
可以协变为动物
逆变(Contravariance)
假如有一个函数类型:
(x: 狗) => void
这个类型表示接收一个参数为狗
的函数,使用这个函数时,传入动物
是不对的,因为动物
无法隐式转换为狗
(如果可以的话,那我可以把猫
隐式转换为动物
,然后隐式转换为狗
)。
假如现在有另一个函数类型:
(x: 动物) => void
这个函数接收参数为动物
,所以显然支持把狗
作为参数传入,这意味着这个函数可以代替(即隐式转换)要求参数确定为狗
的另一个函数:(x: 狗) => void
,即:
(x: 动物) => void
可以隐式转为 (x: 狗) => void
总结地说,类型A
可以协变为类型B
时,类型 (x: B) => T
可以协变为 (x: A) => T
,这里A
和B
发生的颠倒,称为 (x: A) => T
逆变为 (x: B) => T
。
打赏
微信扫一扫,打赏 1 元表示支持吧~

这篇文章对你有用?
