typescript - Angular 4: Argument de tip 'typeof CLASS' nu poate fi atribuit parametrului de tip 'INTERFACE'


Mă joc cu componente dinamice în Angular. Dar m-am lovit de o problemă pe care nu știu cum să o rezolv.

Am obținut această interfață.

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

Clasă care implementează interfața.

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

    }
}

Funcție care folosește interfața ca tip de argument.

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

Apelarea funcției.

openComponent(DemoComponent, null); <-- ERROR

Primești această eroare:

Argument of type 'typeof DemoComponent' is not assignable to parameter of type 'InjectableComponent'.
Property 'setData' is missing in type 'typeof DemoComponent'.

Poate cineva să-mi explice de ce nu funcționează asta? Poate o soluție temporară?

Răspuns #1

Poți folosi tipul generic special Type<T> pentru asta, cum ar fi

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

Exemplu Plunker

Răspunsul #2

Se pare că metoda openComponent așteaptă o instanță:

   const demoComponent = new DemoComponent()

   ...

   openComponent(demoComponent, null);