使用 TypeScript 声明 class 类型(将 class 作为参数传递)

Declare class type with TypeScript (pass class as parameter)

所以我有一个接受不同构造函数的函数,像这样:

export class SomeSuperClass {
 ...
}

export class A extends SomeSuperClass {
 ...
}

export class B extends SomeSuperClass {
 ...
}


const foo = function(Clazz: SomeSuperClass){

  const v = new Clazz();

}

foo(A);  // pass the class itself
foo(B);  // pass the class itself

问题是 SomeSuperClass 意味着 Clazz 将是 SomeSuperClass 的实例,而不是 SomeSuperClass 本身。

我试过像这样愚蠢的东西(显然行不通):

   const foo = function(Clazz: SomeSuperClass.constructor){

      const v = new Clazz();

   }

执行此操作的正确方法是什么?

看了this answer之后,看来只有这样才能做到:

interface ISomeSuperClass {
    new (): SomeSuperClass;
}

foo 将变为:

   const foo = function(Clazz: ISomeSuperClass){

      const v = new Clazz();

   }

这看起来有点奇怪,但它可以编译。

正如您所提到的,您正在寻找的是如何描述 class 构造函数而不是实例。可以通过以下方式实现:

const foo = function(ctor: new() => SomeSuperClass) {
    ...
}

或者(在本例中结果相同):

const foo = function(ctor: typeof SomeSuperClass) {
    ...
}

这还要求 AB 具有无参数构造函数

以下方法对我有用。

变量名:类名类型;

其中,typeof 是 Javascript 关键字。