Angular / Typescript: написать фабрику, возвращающую типы, полученные из базового класса - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь написать фабричный метод, который возвращает классы, например:

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 - это класс, определенный в другом файле (угловой компонент), который является производным от WidgetBase, и абстрактный класс,Тип <> - это угловой интерфейс, определенный следующим образом:

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

Компилятор жалуется:

Тип 'typeof Widget2Component' не может быть назначен типу 'Type<T>'.Тип 'Widget2Component' нельзя назначить типу 'T'.

, но я не понимаю, почему ... Widget2Component расширяет WidgetBase!

1 Ответ

0 голосов
/ 17 сентября 2018

Тициан прав в том, что он сказал в комментариях ... Поэтому я изменил свой метод так:

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;
    }
}
...