Ale*_*lls 9 typescript typescript2.0
所以我有一个接受不同构造函数的函数,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
问题是这SomeSuperClass
意味着Clazz
将是 的一个实例SomeSuperClass
,而不是SomeSuperClass
它本身。
我尝试了这样的愚蠢事情(这显然不起作用):
const foo = function(Clazz: SomeSuperClass.constructor){
const v = new Clazz();
}
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
正如您所提到的,您要寻找的是如何描述类构造函数而不是实例。可以通过以下方式实现:
const foo = function(ctor: new() => SomeSuperClass) {
...
}
Run Code Online (Sandbox Code Playgroud)
或者(在这种情况下结果相同):
const foo = function(ctor: typeof SomeSuperClass) {
...
}
Run Code Online (Sandbox Code Playgroud)
这也需要A
并B
具有无参数构造函数
看了这个答案后,看起来唯一的方法是这样:
interface ISomeSuperClass {
new (): SomeSuperClass;
}
Run Code Online (Sandbox Code Playgroud)
然后 foo 会变成:
const foo = function(Clazz: ISomeSuperClass){
const v = new Clazz();
}
Run Code Online (Sandbox Code Playgroud)
这看起来有点奇怪,但它可以编译。
归档时间: |
|
查看次数: |
5645 次 |
最近记录: |