【问题标题】:Angular 4: Argument of type 'typeof CLASS' is not assignable to parameter of type 'INTERFACE'Angular 4:“typeof CLASS”类型的参数不可分配给“INTERFACE”类型的参数
【发布时间】:2017-07-10 19:30:47
【问题描述】:

我正在使用角度的动态组件。 但是我遇到了一个我不知道如何解决的问题。

我得到了这个界面。

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'.

有人可以向我解释为什么这不起作用吗? 也许是一种解决方法?

【问题讨论】:

标签: angular typescript interface


【解决方案1】:

你可以使用特殊的泛型类型 Type&lt;T&gt; 来做类似的事情

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

Plunker Example

【讨论】:

    【解决方案2】:

    看来openComponent 方法需要一个实例:

       const demoComponent = new DemoComponent()
    
       ...
    
       openComponent(demoComponent, null);
    

    【讨论】:

    • 我可以看到,但我需要类类型。它与 .resolveComponentFactory 一起使用。我尝试将接口创建为抽象类,然后扩展而不是实现,但遇到了类似的错误。
    猜你喜欢
    • 2020-01-06
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2018-05-15
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多