我有一个基类,它由几个子类扩展。现在,我想将父类的类型作为属性的类型。所有子类型也应有效。我已经尝试过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();