Динамическая загрузка компонентов - получить компонент как переменную

Я реализую относительно сложный загрузчик компонентов в Angular, и я хотел бы динамически получить экземпляр компонента из хранилища rxjs.

loadEditAreaComponent(component: any, componentInstanceData?: {}){
    const componentFactory = this.cfr.resolveComponentFactory(component);
    const viewContainerRef = this.editAreaHost.viewContainerRef;
    const componentRef = viewContainerRef.createComponent(componentFactory);
    Object.keys(componentInstanceData).forEach(key => {
      componentRef.instance[key] = componentInstanceData[key];
})

Оно работает. Однако мне кажется, что any здесь немного небрежен. Я не могу найти правильный тип.

Подпись resolveComponentFactory - (method) ComponentFactoryResolver.resolveComponentFactory<unknown>(component: Type<unknown>): ComponentFactory<unknown>.

Когда я говорю component: Type, я получаю: Argument of type 'Type' is not assignable to parameter of type 'Type<unknown>'.

Когда я говорю component: Type<unknown> или Type<any>, я получаю: Type 'Type' is not generic.

Буду признателен за помощь, а также хотел бы получить некоторую информацию об ограничениях Typescript, которые я, вероятно, не понимаю.

Благодарю вас!


person noamyg    schedule 12.08.2020    source источник
comment
Откуда вы импортируете Type?   -  person yurzui    schedule 12.08.2020


Ответы (1)


Сигнатура метода resolveComponentFactory выглядит так:

abstract resolveComponentFactory<T>(component: Type<T>): ComponentFactory<T>;

Вы должны использовать тот же тип:

import { Type } from '@angular/core';

loadEditAreaComponent<T>(component: Type<T>, ...
person yurzui    schedule 12.08.2020
comment
Спасибо, я думаю, что Type<unknown> должно было сработать, и я, вероятно, импортировал Type не по тому пути. - person noamyg; 12.08.2020