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