使用嵌套泛型扩展泛型 class
Extending a generics class with nested generics
打字稿中有没有办法以这种方式扩展 class:
class ChildClass<Wrapper<A>> extends SuperClass<A>
这行不通,但想法是将泛型类型包装到已知结构中。这是文档:
https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md
这听起来与这个问题有点相似:
我不太会做 oop,所以我对协变和逆变之类的东西不是很熟悉,如有任何帮助,我们将不胜感激。
在 extends 之前写 ChildClass<Wrapper<A>>
是没有意义的,因为你在那里 声明 泛型类型参数。这意味着您可以给它们命名,如果需要,还可以给它们一个约束(例如 ChildClass<A extends Wrapper>
)。 Wrapper<A>
在这种情况下是什么意思?编译器无法理解它。
绝对有可能在 extends 的另一边使用 Wrapper<A>
,因为那里 A
不是(正式的)类型 参数,而是类型参数。这意味着您正在 使用 之前定义的类型参数,您可以在那里生成新类型。
因此,根据您实际想做什么,有两种选择供您选择:
A
可分配给 Wrapper
当您想确保 A
是 Wrapper
或派生的 class 时,请使用通用约束:
class ChildClass<A extends Wrapper> extends SuperClass<A>
A
是 Wrapper<>
的类型参数
如果 Wrapper<>
本身是一个泛型 class 或接口,并且您想使用 A
作为其类型参数,请执行以下操作:
class ChildClass<A> extends SuperClass<Wrapper<A>>
打字稿中有没有办法以这种方式扩展 class:
class ChildClass<Wrapper<A>> extends SuperClass<A>
这行不通,但想法是将泛型类型包装到已知结构中。这是文档:
https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md
这听起来与这个问题有点相似:
我不太会做 oop,所以我对协变和逆变之类的东西不是很熟悉,如有任何帮助,我们将不胜感激。
在 extends 之前写 ChildClass<Wrapper<A>>
是没有意义的,因为你在那里 声明 泛型类型参数。这意味着您可以给它们命名,如果需要,还可以给它们一个约束(例如 ChildClass<A extends Wrapper>
)。 Wrapper<A>
在这种情况下是什么意思?编译器无法理解它。
绝对有可能在 extends 的另一边使用 Wrapper<A>
,因为那里 A
不是(正式的)类型 参数,而是类型参数。这意味着您正在 使用 之前定义的类型参数,您可以在那里生成新类型。
因此,根据您实际想做什么,有两种选择供您选择:
A
可分配给 Wrapper
当您想确保 A
是 Wrapper
或派生的 class 时,请使用通用约束:
class ChildClass<A extends Wrapper> extends SuperClass<A>
A
是 Wrapper<>
如果 Wrapper<>
本身是一个泛型 class 或接口,并且您想使用 A
作为其类型参数,请执行以下操作:
class ChildClass<A> extends SuperClass<Wrapper<A>>