使用嵌套泛型扩展泛型类

时间:2017-11-22 09:59:44

标签: oop typescript generics nested-generics

是否有一种方法可以用这种方式扩展一个类:

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?

我没有做太多的事情,所以我不熟悉协方差和逆变等内容,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

在扩展之前编写ChildClass<Wrapper<A>>没有任何意义,因为你声明了泛型类型参数。这意味着你可以给他们一个名字,如果你需要,也可以给他们一个约束(例如ChildClass<A extends Wrapper>)。 Wrapper<A>在这种情况下的含义是什么?编译器可以毫无意义。

绝对可能的是在另一侧使用Wrapper<A> ,因为A不是(正式)类型参数,但是类型参数。这意味着您使用之前定义的类型参数,并且您可以使用它生成新类型。

因此,根据您实际想要做的事情,有两种选择:

A可分配给Wrapper

如果要确保AWrapper或派生类,请使用通用约束:

class ChildClass<A extends Wrapper> extends SuperClass<A>

AWrapper<>

的类型参数

如果Wrapper<>本身是通用类或接口,并且您希望使用A作为其类型参数,请执行以下操作:

class ChildClass<A> extends SuperClass<Wrapper<A>>