问题标签 [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.
types - 这是功能亚型关系的一个例子吗?
在 Scala “4.5 Variance”中的函数式编程原理的这段视频中,您可以看到一张幻灯片,上面写着:
翻译:
假设您有两种函数类型:
根据里氏替换原则,下列哪项应该是正确的?
A <: B
(选中)B <: A
A
并且B
是无关的。
视频声明类型A
是 type 的子类型B
;但是,它确实是这么说的,
类型 A 满足与类型 B 相同的合同,如果你给它一个 NonEmpty 集,它会给你一个 IntSet,但它实际上会满足比 B 更多。
但这不是真的,B 包含 NonEmpty 集,其中包含的不仅仅是IntSet。这个视频是不是直接不正确和混乱?
typescript - TypeScript:绕过 Map `getOrCreate` 辅助函数中的不健全问题
我有一个辅助函数用于从地图中获取条目,如果它不存在则添加它。
TypeScript 在泛型类型差异方面的不健全最终导致了我这个实际问题:
我发现V2
在函数签名中添加另一个类型参数 ( ) “修复”了这个问题:
它仍然不健全,但至少 TypeScript 不能自动推断类型,这是一个轻微的改进。
问题:
- 有没有更好的方法来完成我正在做的事情?
- 有没有
mapGetOrCreate2
比原版差的方法?
typescript - TypeScript 的解决方法不推断逆变性?
TypeScript 似乎没有推断出逆变性。这是一个说明不一致的示例:
我希望Test3
是“否”,因为这也让你这样做(这只是传递Getter<Base>
给期望 a 的函数的反面Getter<Der>
):
在我的具体情况下,我正在编写一些从 HTML 元素中读取值的代码,因此有一个名为的接口Property
类似于in”或逆变的东西):Setter
set
get
案例1(罚款):
案例2(坏):
请注意,如果我在我的界面中添加一个返回 E 的方法Property
(并在实例上实现它),打字稿将正确地抱怨案例 1,但不会抱怨案例 2。
是否有一种解决方法可以用来欺骗打字稿以阻止我做类似案例 2 的事情?我不在乎我是否完全失去方差,如果可能的话,这样的事情会很好: