Использование общего Компонента с 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);
Это может быть проблемой в определении типа платформы. Этот код - обходной путь, используйте его, если больше ничего не найдете.