typescript - Angular 4: Argument av typen 'typeof CLASS' kan ikke tildeles parameter av typen 'INTERFACE'
Jeg eksperimenterer med dynamiske komponenter i Angular. Men jeg har støtt på et problem jeg ikke vet hvordan jeg skal løse.
Jeg fikk dette grensesnittet.
export interface InjectableComponent{
setData(data: any): void;
}
Klasse som implementerer grensesnitt.
export class DemoComponent implements InjectableComponent {
setData(data: any): void {
}
}
Funksjon som bruker grensesnitt som argumenttype.
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);
}
Kaller funksjon.
openComponent(DemoComponent, null); <-- ERROR
Får denne feilen:
Argument of type 'typeof DemoComponent' is not assignable to parameter of type 'InjectableComponent'.
Property 'setData' is missing in type 'typeof DemoComponent'.
Kan noen forklare meg hvorfor dette ikke fungerer? Kanskje en løsning?
Svar #1
Du kan bruke den spesielle generiske typen Type<T> for det som
openComponent(component: Type<InjectableComponent>, data: any) {
...
}
Plunker-eksempel
Svar #2
Det ser ut til at openComponent-metoden forventer en instans:
const demoComponent = new DemoComponent()
...
openComponent(demoComponent, null);
