我有一个基类,它由几个子类扩展。现在,我想将父类的类型作为属性的类型。所有子类型也应有效。我已经尝试过typeof,但这是行不通的。关于如何将基类的类型作为属性的类型的任何想法?我想要引用该类型的原因是我希望能够创建Class的新实例,例如new test.componentType()应该创建Child2的新实例。

class Parent {

}

class Child1 extends Parent {

}

class Child2 extends Parent {

}

interface Config {
    componentType: typeof Parent;
}

const test: Config = {
    componentType: typeof Child2
}

new test.componentType() -> should create a new instance of Child2

最佳答案

您的代码无法正常工作,因为Child2已经是与typeof Parent兼容的类对象。 test应该这样定义:

const test: Config = {
    componentType: Child2
}

不过,您似乎只希望componentType字段保存一个构造函数。在这种情况下,您可以使用componentType方法将new原型(prototype)化为对象:
interface Config {
    componentType: { new(): Parent };
}

const test: Config = {
    componentType: Child2
}

const myinstance: Parent = new test.componentType();

要保留有关构造的实例类型的信息,泛型
可以使用:
interface Config<T extends Parent> {
    componentType: { new(): T };
}

const test = {
    componentType: Child2
}

const myinstance: Child2 = new test.componentType();

09-12 07:39