首页 > 解决方案 > 在 Typescript 中引用泛型类型的泛型类型?

问题描述

是否可以在 Typescript 中引用泛型类型的泛型类型?基本上,对于给定的类型:

class BaseClass<SomeType> {
  // ...
}

class InheritedClass extends BaseClass<string> { }

class Wrapper<AnyBaseClass extends BaseClass<any>> {
  state: AnyBaseClass[<SomeType>]; // What should I put here ?
}

const wrapper = new Wrapper<InheritedClass>();
wrapper.state = "foo"; // Ok
wrapper.state = 4; // Not ok

我希望我的属性类型state取决于给定的内部泛型参数Wrapper

有没有办法引用这个内部泛型类型?我找到的唯一解决方案是尝试使用ReturnType<...>or找到它AnyBaseClass["anyPropertyOfTypeSomeType"],但我更希望有一种直接引用这种类型的方法。

提前致谢!

标签: typescriptgenerics

解决方案


这似乎是一个很好的例子infer,但你只能在条件中使用它......所以我最终使用了一个总是评估为真的条件来使用这种 janky 类型:

class Wrapper<AnyBaseClass extends BaseClass<any>> {
  state: AnyBaseClass extends BaseClass<infer T> ? T : never;
}

可能有一种更简洁的方法来编写它,但它会为state. 我也把你改成InheritedClass<any>BaseClass<any>这里,认为这是一个错字


推荐阅读