javascript - RXJS Observable enum-typ, Typ 'Observable' kan inte tilldelas till typ 'Type'
Jag försöker observera det senaste händelsen som händer i en ström. Varje händelse kan vara av två typer, representerade av ett enum. Men jag får ett kompileringsfel i följande exempel:
import { BehaviorSubject } from 'rxjs/Rx';
export enum FilterAction {
RESET, UPDATE
}
export class FilterSomething {
private _filterEvent: BehaviorSubject<FilterAction> = new BehaviorSubject(FilterAction.RESET);
get filterEvent() {
return this._filterEvent.asObservable(); // <-- behave.ts(14,12): error TS2322: Type 'Observable<FilterAction>' is not assignable to type 'FilterAction'
}
set filterEvent(action: FilterAction){
this._filterEvent.next(action);
}
}
Kompileringsfel: behave.ts(14,12): fel TS2322: Typen 'Observable<FilterAction>' kan inte tilldelas typen 'FilterAction'
Men när jag använder den generiska any kompilerar det (och fungerar).
set filterEvent(filterAction: any) {
this._filterEvent.next(filterAction);
}
Jag misstänker att det har något att göra med enum-värdena, till skillnad från instanser av FilterAction.
Svar #1
Problemet är returtypen för din getter. Getter och Setter ska ta och returnera samma typ av parameter, vilket är FilterAction i ditt fall. Men din getter returnerar Observable<FilterAction>. Använd bara inte getter, ändra namnet på funktionen. Då slutar språkservicen visa fel. I språkspecifikationen:
Om båda åtkomstmetoderna innehåller typnoteringar måste de angivna typerna vara identiska.
Du kan kolla in detta.