问题标签 [generic-variance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
31 浏览

types - 这是功能亚型关系的一个例子吗?

在 Scala “4.5 Variance”中的函数式编程原理的这段视频中,您可以看到一张幻灯片,上面写着:

翻译

假设您有两种函数类型:

根据里氏替换原则,下列哪项应该是正确的?

  • A <: B(选中)
  • B <: A
  • A并且B是无关的。

视频声明类型A是 type 的子类型B;但是,它确实是这么说的,

类型 A 满足与类型 B 相同的合同,如果你给它一个 NonEmpty 集,它会给你一个 IntSet,但它实际上会满足比 B 更多

但这不是真的,B 包含 NonEmpty 集,其中包含的不仅仅是IntSet。这个视频是不是直接不正确和混乱?

0 投票
1 回答
51 浏览

typescript - TypeScript:绕过 Map `getOrCreate` 辅助函数中的不健全问题

我有一个辅助函数用于从地图中获取条目,如果它不存在则添加它。

TS 操场上的完整代码

TypeScript 在泛型类型差异方面的不健全最终导致了我这个实际问题:

我发现V2在函数签名中添加另一个类型参数 ( ) “修复”了这个问题:

它仍然不健全,但至少 TypeScript 不能自动推断类型,这是一个轻微的改进。

问题:

  1. 有没有更好的方法来完成我正在做的事情?
  2. 有没有mapGetOrCreate2比原版差的方法?
0 投票
1 回答
36 浏览

typescript - TypeScript 的解决方法不推断逆变性?

TypeScript 似乎没有推断出逆变性。这是一个说明不一致的示例:

我希望Test3是“否”,因为这也让你这样做(这只是传递Getter<Base>给期望 a 的函数的反面Getter<Der>):

在我的具体情况下,我正在编写一些从 HTML 元素中读取值的代码,因此有一个名为的接口Property类似于in”或逆变的东西):Settersetget

案例1(罚款):

案例2(坏):

请注意,如果我在我的界面中添加一个返回 E 的方法Property(并在实例上实现它),打字稿将正确地抱怨案例 1,但不会抱怨案例 2。

是否有一种解决方法可以用来欺骗打字稿以阻止我做类似案例 2 的事情?我不在乎我是否完全失去方差,如果可能的话,这样的事情会很好: