在TypeScript中创建类的映射

时间:2019-11-18 23:43:37

标签: node.js typescript class dictionary

我有一个渲染引擎,就像React一样,我需要将类而不是实例存储在对象中进行编译。

因此,例如,我有一个Button组件,希望能够动态实例化。这样做就像

一样容易
new components["Button"]

为此,我需要所有可能的类的列表。因此,我声明了一个Dictionary接口,如下所示:

interface Dictionary<T> {
    [Key: string]: T;
}

这很好用,我很容易将对象添加到此字典中。除非我有对象:

const components: Dictionary<Component> = {
    Button: Button
}

然后我得到一个错误,因为Button是一个类,而不是一个实例。这里的问题是,我不想将字典定义为Dictionary<Function>,因为那意味着我允许任何函数进入字典。具体来说,我只想允许放入扩展 Component类的字典中。

我将如何实现?

1 个答案:

答案 0 :(得分:0)

需要定义构造函数的签名(如果考虑一下,这很有意义),但是您可以执行以下操作:

interface ComponentClass {
    new (a: number): Component;
}

(构造函数的签名可能不是“数字”,而是放入任何数字。)