我有一个通过运行其方法初始化的应用程序 .init(params)
如下所示:
app.init([TopBar, StatusBar, MainArea]);
其中 TopBar
、 StatusBar
和 MainArea
是类,而不是类的实例。这些类中的每一个都实现相同的接口 IComponent
。
我想从 .init(params)
方法中传递的类中实例化对象,如下所示:
init(params: IComponent[]): void {
params.map(function (component) {
let comp = new component();
this.components[comp.constructor.name] = comp;
}, this);
问题是因为这些不是实例,TypeScript 不知道它们的类型并抛出错误:
错误 TS2345:类型“(typeof TopBar | typeof StatusBar | typeof MainArea)[]”的参数不可分配给类型“IComponent[]”的参数。
如何修复代码,以便我可以将实现某些接口的类数组传递给方法?
原文由 Sergei Basharov 发布,翻译遵循 CC BY-SA 4.0 许可协议
有一个 可用的打字稿游乐场(运行它以获得结果警报)
我们需要的是创建一个自定义的
type InterfaceComponent
。这将被预期为init()
方法的数组在这里 检查