Использование общего Компонента с resolComponentFactory приводит к Компоненту<{}> вместо <T>

Я построил диалоговую службу, которая динамически создает DialogComponent с дочерним компонентом.

Я хочу, чтобы мой DialogComponent был общим классом <T> так как я хочу напечатать для любого компонента ребенка я использую. В настоящее время я создаю свой DialogComponent, используя строки тезиса ->

const componentFactory = this.componentFactoryResolver.resolveComponentFactory(DialogComponent);
const componentRef = componentFactory.create(new DialogInjector(this.injector, map));

Проблема в том, что resolComponentFactory фактически возвращает DialogComponent<{}> вместо T, Я пытался разыграть, но, похоже, я не могу, потому что некоторые методы отсутствуют.

Мне интересно, как я мог достичь такой вещи!

Благодарю.

РЕДАКТИРОВАТЬ

this.componentFactoryResolver.resolveComponentFactory<DialogComponent<T>> сделал трюки..

2 ответа

Решение

Чтобы получить правильные типы, вам нужно передать требуемый тип в общем наборе resolveComponentFactory:

this.componentFactoryResolver.resolveComponentFactory<DialogComponent<T>>(DialogComponent);

Если вы уверены в себе, просто обойдите проверку типов с помощью функции.

myFunction<T>(className: T): { componentFactory: T, componentRef: any } {
  const componentFactory: T = this
    .componentFactoryResolver
    .resolveComponentFactory(className) as any;
  const componentRef = componentFactory
    .create(new DialogInjector(this.injector, map));
  return { componentFactory, componentRef };
}

const { componentFactory, componentRef } = myFunction(DialogComponent);

Это может быть проблемой в определении типа платформы. Этот код - обходной путь, используйте его, если больше ничего не найдете.

Другие вопросы по тегам