Angular / Typescript:编写从基类派生的工厂返回类型

时间:2018-09-17 15:19:51

标签: angular typescript inheritance factory-pattern

我正在尝试编写一个返回类的工厂方法,如下所示:

getWidget<T extends WidgetBase>(componentName: string): Type<T> {
    switch (componentName) {
        default:
            throw new Error(`Widget ${componentName} is not registered in the system`);
        case "Widget2":
            return Widget2Component;
    }
}

其中Widget2Component是在另一个文件(Angular组件)中定义的类,该文件派生自WidgetBase和抽象类,而Type <>是这样定义的Angular接口:

interface Type<T> extends Function {
    new (...args: any[]): T
}

编译器抱怨:

类型'typeof Widget2Component'不可分配给类型'Type<T>'。   无法将类型“ Widget2Component”分配给类型'T'

但是我不明白为什么... Widget2Component扩展了WidgetBase!

1 个答案:

答案 0 :(得分:0)

提香在他的评论中说的是对的... 所以我修改了这个方法:

getWidget(componentName: string): Type<WidgetBase> {
    switch (componentName) {
        default:
            throw new Error(`Widget ${componentName} is not registered in the system`);
        case "Widget1":
            return Widget1Component;
        case "Widget2":
            return Widget2Component;
    }
}