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.