Angular 4 : Argument of type 'typeof CLASS' is not assignable to parameter of type 'INTERFACE'

标签 angular typescript interface

我正在玩转 Angular 动态组件。 但是我遇到了一个我不知道如何解决的问题。

我得到了这个界面。

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

类实现接口(interface)。

export class DemoComponent implements InjectableComponent {
    setData(data: any): void {

    }
}

使用接口(interface)作为参数类型的函数。

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

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

最佳答案

您可以使用特殊的通用类型 Type<T>像这样

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

Plunker Example

关于 Angular 4 : Argument of type 'typeof CLASS' is not assignable to parameter of type 'INTERFACE' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45020196/

相关文章:

angular - combineLatest 不适用于 promise

javascript - Typescript class.default 不是构造函数

inheritance - Swift——要求实现协议(protocol)的类是某个类的子类

javascript - 打印对象给出的值与打印该对象的属性不同

java - Java 泛型有没有办法采用需要实现 2 个接口(interface)的泛型参数?

angular - combineLatest 与 FormControl valueChanges 事件绑定(bind)不发出

angular - 平行的两个 Material 主题

javascript - Angular:使用带有自定义字符串的管道格式化日期

javascript - 为什么从文件导入 * 执行代码?

requirejs - 带有 requireJs 的 TypeScript 用于编码模块化方式