5

我已经构建了一个对话服务,它动态地创建一个带有子组件的 DialogComponent。

我希望我的 DialogComponent 是一个通用类,<T>因为我希望为我正在使用的任何子组件键入。我目前正在使用这些行创建我的 DialogComponent ->

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

问题是 resolveComponentFactory 实际上返回的是 aDialogComponent<{}>而不是T. 我确实尝试过投射,但似乎我不能,因为缺少一些方法。

我想知道我怎么能做到这一点!

谢谢。

编辑

this.componentFactoryResolver.resolveComponentFactory<DialogComponent<T>>做的伎俩..

4

2 回答 2

3

要获得正确的类型,您需要在通用类型中传递所需的类型resolveComponentFactory

this.componentFactoryResolver.resolveComponentFactory<DialogComponent<T>>(DialogComponent);
于 2019-02-15T07:34:32.250 回答
2

如果您确定自己,只需使用函数绕过类型检查。

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);

这可能是框架类型定义中的一个问题。此代码是一种解决方法,如果您没有找到任何其他内容,请使用它。

于 2019-02-14T15:12:25.633 回答