我有一个抽象类,我想生成一个与该类型的任何非抽象子类匹配的类型,而不是其实例。这可能吗?
abstract class A {
}
function b(type: NonAbstractDescendant<typeof A>) {
}
我的猜测是函数 (
b
) 需要 type
来创建实例。这建议使用类似 { new() : A }
的类型(具有适当的参数类型),或者是否需要静态属性和/或方法 { new(): A } & typeof A
。无论哪种情况,这只匹配构造函数采用兼容参数的子类。
可以避免像
{ new(...args: ConstructorParameters<typeof B>): B } & typeof B
那样重复构造函数参数,但这很可能比简单地重复它们要长。
一个例子:
abstract class A {}
class D extends A {}
function f(cons: { new() : A } & typeof A): A {
return new cons();
}
f(D);