首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript中方差、协方差、逆方差和协方差之间的DIfference

TypeScript中方差、协方差、逆方差和协方差之间的DIfference
EN

Stack Overflow用户
提问于 2021-02-28 22:30:52
回答 1查看 392关注 0票数 5

你能在一些简单的TypeScript例子中解释一下什么是方差、协方差、逆方差和协方差吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-01 00:49:27

方差

与泛型类型

变化

关于其类型参数

..。如果你知道这一点

,那么方差就会告诉你是否可以得出这样的结论

,结论是

,或者都不是,或者两者都是。

协方差

意味着

co

-

变化

..。也就是说,

(方向与相同)

..。换句话说,如果

,然后

..。示例:

函数或方法类型与它们的返回类型是不同的:

键入Co = () => V;函数协方差(t: T,u: U,coT: Co,coU: Co) {u= t;// okay t= u;//错误!coU = coT;// okay = coU;//错误!}

其他(目前未说明)示例如下:

对象的属性类型是协变的,即使这对于可变属性来说并不合理。

类构造函数的实例类型是协变的

逆方差

意味着

反差

-

变化

..。也就是说,

变化与

(与相反方向)

..。换句话说,如果

,然后

..。示例:

函数类型与其参数类型相反(使用

已启用):

键入Contra = (v: V) => void;函数contraU(t: T,u: U,contraT: Contra,contraU: Contra) {u= t;// okay t= u;//错误!contraU = contraT;//错误!contraT = contraU;//好的}

其他(目前未说明)示例如下:

对象的键类型是逆变量的

类构造函数的构造参数类型是逆变量

不变性

意味着

既不与之相异,也不与之相反

既不是协变的,也不是逆变的

..。这实际上是在最一般的情况下发生的。协方差和逆方差是“脆弱的”,因为当您组合协变和逆变类型的函数时,很容易产生不变的结果。示例:

返回与其参数相同类型的函数类型在该类型中既不是协变的,也不是逆变的:

键入= (v: V) => V;函数不变性(t: T,u: U,inT: In,inU: In) {u= t;// okay t= u;//错误!inU = inT;//错误!inT = inU;//错误!}

双方差

意味着

变化

两者都有

使用

反对

中既是协变的也是逆变的

..。在声音类型系统中,这基本上

从来没有发生过

对于任何非平凡类型的函数。您可以演示只有像这样的常量类型的功能

是真正的双变量(快速草图:

对所有人来说都是正确的

,所以

,并且在声音类型系统中,如果

,然后

..。所以如果

=

为所有人

,然后

是常量)。

但是Typescript没有

它也不打算

一个完善的类型系统。而且还有

一个值得注意的案例

其中TypeScript将类型函数视为双变量:

方法类型随其参数类型的不同而变化(这也发生在所有函数类型中,使用

已禁用):

类型Bi ={ foo(v: V):biU };函数协方差(t: T,u: U,biT: Bi,foo: Bi) {u= t;// okay t= u;//错误!biU = biT;// okay = biU;// okay }

游乐场代码链接

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66410115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档