首页 > 解决方案 > 带有引用泛型类(非实例)类型的字段的 Typescript 泛型接口

问题描述

假设我有一个 typescript classA和一个Bclassextends A

class A {
  static a(): number { return 10; }
  a_(): number { return 10; }
}

class B extends A {
  static b(): number { return 20; }
  b_(): number { return 20; }
}

我想定义一个通用的打字稿接口,如下所示:

interface ClassAndInstance<C extends A> {
  c: ClassType<C>
  i: C
}

(注意:ClassType这里指的是泛型类型的类(不是实例)。)

现在,如果我有一个实例ClassAndInstance

ci: ClassAndInstance<B>;

我希望能够同时调用 B 的类和实例字段,如下所示:

ci.c.a();  // 10
ci.c.b();  // 20
ci.i.a_(); // 10
ci.i.b_(); // 20;

我将如何定义ClassType以类型安全的方式实现这一目标?

我选择了一个接口来定义背后的语义ClassAndInstance,但如果有任何其他方法可以实现这一点,那也可以。

标签: javascripttypescriptclassgenericsinstance

解决方案


推荐阅读