方法的Typescript声明参数是抽象类的类型,并执行静态方法

方法的Typescript声明参数是抽象类的类型,并执行静态方法,typescript,oop,Typescript,Oop,我遇到了一个有趣的问题。我有一个带有静态方法的抽象类,我希望扩展多个其他类 我想将所有这些未实例化的类作为数组提供给另一个类中的方法。如果从类静态方法返回的值为false,那么这个其他类方法将实例化它们 下面是一些示例代码来说明我的问题: 抽象类抽象{ 公共静态延迟(){ 返回true; } } 类MyClass扩展了抽象{} 另一类{ 公共添加(my_类:Array Abstract>){ 常量x=my_类[0]。延迟(); const y=新的my_类[0](); } } const oth

我遇到了一个有趣的问题。我有一个带有静态方法的抽象类,我希望扩展多个其他类

我想将所有这些未实例化的类作为数组提供给另一个类中的方法。如果从类静态方法返回的值为false,那么这个其他类方法将实例化它们

下面是一些示例代码来说明我的问题:

抽象类抽象{
公共静态延迟(){
返回true;
}
}
类MyClass扩展了抽象{}
另一类{
公共添加(my_类:Array Abstract>){
常量x=my_类[0]。延迟();
const y=新的my_类[0]();
}
}
const other_class=新的OtherClass();
其他_类添加([MyClass]);
在行
const x=my_classes[0].defer()上我得到以下错误:

类型'new()=>Abstract'.ts(2339)上不存在属性'defer'

如果我将my_classes参数切换为
数组类型
,则在尝试实例化它时会出现以下错误:

无法创建抽象类的实例。(2511)

在这种情况下,我如何调用静态方法并能够创建类的新实例?

类型
new()=>Abstract
只表示一个函数,它可以充当
抽象类的构造函数。它不捕获
Abstract
的静态成员,因为从理论上讲,您可以创建遵循
new()=>Abstract
但不包含任何静态成员的其他类

在typescript中,您可以使用
typeof Abstract
访问静态成员。因此,请更改
add
方法的定义,以包括构造函数签名和静态方法:

public add(my_classes: Array<typeof Abstract & (new () => Abstract)>) { ... }
public-add(my_-classes:Array-Abstract)>){…}
这将纠正您的错误

请注意,在typescript中,类的实例类型与类名完全相同。在您的示例中,
Abstract
类的实例将具有类型
Abstract
。您可以通过使用
typeof
作为前缀来访问类的静态端



您的答案适用于执行静态方法,但在尝试实例化类时失败。我编辑了这个问题以包含这个新信息。尝试将构造签名与
摘要的静态部分一起包含进去。例如,将数组元素的类型从
typeof Abstract
更改为
typeof Abstract&(new()=>Abstract)
.Genius。非常感谢。如果你更新你的答案,包括我会标记为接受的答案。