RXJS Observable 枚举类型,类型“Observable<Type>”不可分配给类型“Type”

Mat*_*att 1 javascript observable rxjs typescript

我正在尝试观察流中发生的最新事件。每个事件可以是两种类型之一,由枚举表示。但是,我在以下示例中收到编译错误:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

编译错误: behave.ts(14,12): error TS2322: Type 'Observable<FilterAction>' is not assignable to type 'FilterAction'

然而,当我使用通用any它编译(并工作)。

set filterEvent(filterAction: any) {
   this._filterEvent.next(filterAction);
}
Run Code Online (Sandbox Code Playgroud)

我怀疑这与枚举值有关,而不是与FilterAction.

ulu*_*eyn 5

问题是你的返回类型getterGetters 和Setters 应该接受并返回相同类型的参数,这就是FilterAction您的情况。但你的getter回报Observable<FilterAction>。只是不要使用getter,更改函数的名称。然后语言服务停止显示错误。在语言规范中:

如果两个访问器都包含类型注释,则指定的类型必须相同。

你可以检查一下