我有一个渲染引擎,就像React一样,我需要将类而不是实例存储在对象中进行编译。
因此,例如,我有一个Button
组件,希望能够动态实例化。这样做就像
new components["Button"]
为此,我需要所有可能的类的列表。因此,我声明了一个Dictionary
接口,如下所示:
interface Dictionary<T> {
[Key: string]: T;
}
这很好用,我很容易将对象添加到此字典中。除非我有对象:
const components: Dictionary<Component> = {
Button: Button
}
然后我得到一个错误,因为Button
是一个类,而不是一个实例。这里的问题是,我不想将字典定义为Dictionary<Function>
,因为那意味着我允许任何函数进入字典。具体来说,我只想允许类放入扩展 Component
类的字典中。
我将如何实现?
答案 0 :(得分:0)
您还需要定义构造函数的签名(如果考虑一下,这很有意义),但是您可以执行以下操作:
interface ComponentClass {
new (a: number): Component;
}
(构造函数的签名可能不是“数字”,而是放入任何数字。)