所以我有一个接受不同构造函数的函数,如下所示:
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();
}
这样做的正确方法是什么?
答案 0 :(得分:3)
在查看this answer之后,看起来这样做的唯一方法是:
interface ISomeSuperClass {
new (): SomeSuperClass;
}
然后foo将成为:
const foo = function(Clazz: ISomeSuperClass){
const v = new Clazz();
}
这看起来很奇怪,但它会编译。
答案 1 :(得分:1)
正如您所提到的,您所关注的是如何描述类构造函数而不是实例。它可以通过以下方式实现:
const foo = function(ctor: new() => SomeSuperClass) {
...
}
或者(在这种情况下结果相同):
const foo = function(ctor: typeof SomeSuperClass) {
...
}
这也需要A
和B
拥有无参数构造函数
答案 2 :(得分:0)
以下方法对我有用。
VarName:typeof ClassName;
其中typeof是Javascript关键字。