【发布时间】:2017-07-28 04:58:02
【问题描述】:
在 TypeScript(我的版本:2.1.1)中,可以像这样设置类型参数的上限:
class Animal {}
class Cat extends Animal {}
class Kitten extends Cat{}
function foo<A extends Animal>(a: A) { /* */ }
如何设置A 的下限?以下代码不起作用:
class Animal {}
class Cat extends Animal {}
class Kitten extends Cat{}
function foo<A super Kitten>(a: A) { /* */ }
会导致编译错误。
TypeScript repo 的 GitHub 问题 #13337 中的人建议使用
function foo <X extends Y, Y>(y: Y) { /* */ }
到下限Y 和X。但这不包括我的情况,其中X 是实际类型而不是类型参数。
关于如何降低类型参数的任何想法?
【问题讨论】:
-
为什么需要这样做?如果
A super Kitten那么A显然是Kitten、Cat和Animal,你将如何从缩小范围中受益?你能举一个真实的例子来说明它是如何使用的吗? -
由于您使用了类似 Java 的语法,我假设您从 Java 的逆变性中获得了灵感。事实上,Java 只允许在通配符(例如
Comparable<? super String>)中使用逆变,而不是在类型参数声明上下文(泛型类、接口和/或方法的声明)中。正如其他人指出的那样,原因是在这种情况下,下限将没有意义。
标签: generics typescript types type-bounds