是否有一种方法可以用这种方式扩展一个类:
class ChildClass<Wrapper<A>> extends SuperClass<A>
这不起作用,但想法是将泛型类型包装到已知的构造中。以下是文档:
https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md
这听起来有点类似于这个问题:
Can you subclass a generics class with a specific typed class?
我没有做太多的事情,所以我不熟悉协方差和逆变等内容,任何帮助都会受到赞赏。
答案 0 :(得分:2)
在扩展之前编写ChildClass<Wrapper<A>>
没有任何意义,因为你声明了泛型类型参数。这意味着你可以给他们一个名字,如果你需要,也可以给他们一个约束(例如ChildClass<A extends Wrapper>
)。 Wrapper<A>
在这种情况下的含义是什么?编译器可以毫无意义。
绝对可能的是在另一侧使用Wrapper<A>
,因为A
不是(正式)类型参数,但是类型参数。这意味着您使用之前定义的类型参数,并且您可以使用它生成新类型。
因此,根据您实际想要做的事情,有两种选择:
A
可分配给Wrapper
如果要确保A
是Wrapper
或派生类,请使用通用约束:
class ChildClass<A extends Wrapper> extends SuperClass<A>
A
是Wrapper<>
如果Wrapper<>
本身是通用类或接口,并且您希望使用A
作为其类型参数,请执行以下操作:
class ChildClass<A> extends SuperClass<Wrapper<A>>