【发布时间】:2020-05-23 03:29:45
【问题描述】:
假设
abstract class A {};
class B extends A {};
class C extends A {};
我想接受 A 的任何子类作为参数。
function foo(Subclass: A){
const obj = new Subclass();
}
这行不通。我得到了错误
这个表达式是不可构造的。 'BaseController' 类型没有 构造签名。
然后我尝试了
function foo(Subclass: typeof A){
const obj = new Subclass();
}
现在我得到了错误
无法创建抽象类的实例。ts(2511)
因为它假设我传递的是 A 而不是 A 的子类。
它可以实现吗?我如何让它发挥作用?
【问题讨论】:
-
您在寻找this吗?我不确定您为什么在示例代码中写
new A(),因为A始终是抽象构造函数,而不是您传入的任何内容。也许您的意思是new Subclass()? -
我的错。是
new Subclass() -
如果您将一个已知的类传递给
foo,您是否有理由不只构建该类? -
@jcalz 成功了。
-
@Leon 未知。在我的具体情况下,它可以是任何
Controller。 A 是BaseController。
标签: node.js typescript oop inheritance abstract-class