将抽象类转换为非抽象子类的实用程序类型?

问题描述 投票:0回答:1

我有一个抽象类,我想生成一个与该类型的任何非抽象子类匹配的类型,而不是其实例。这可能吗?

abstract class A {
}
function b(type: NonAbstractDescendant<typeof A>) {
}
abstract typescript-utility
1个回答
0
投票

我的猜测是函数 (

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);
© www.soinside.com 2019 - 2024. All rights reserved.