我在玩角度上的动态组件。
但我遇到了一个我不知道如何解决的问题。
我有这个接口。

export interface InjectableComponent{
    setData(data: any): void;
}

类实现接口。
export class DemoComponent implements InjectableComponent {
    setData(data: any): void {

    }
}

使用接口作为参数类型的函数。
openComponent(component: InjectableComponent, data: any) {
    let componentFactory = this.componentFactoryResolver.resolveComponentFactory(<any>component);
    this.placeholder.clear();

    let componentRef = this.placeholder.createComponent(componentFactory);
    (<InjectableComponent>componentRef.instance).setData(data);
}

调用函数。
openComponent(DemoComponent, null); <-- ERROR

获取此错误:
Argument of type 'typeof DemoComponent' is not assignable to parameter of type 'InjectableComponent'.
Property 'setData' is missing in type 'typeof DemoComponent'.

有人能给我解释一下为什么这不起作用吗?
也许是个解决办法?

最佳答案

您可以使用特殊的泛型类型

openComponent(component: Type<InjectableComponent>, data: any) {
   ...
}

Plunker Example

09-30 19:04