网站搜索

javascript - RXJS Observable 枚举类型,类型 'Observable' 不能分配给类型 'Type'


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

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

编译错误:behave.ts(14,12):错误 TS2322:类型 'Observable' 不能分配给类型 'FilterAction'

然而,当我使用通用的 any 时,它可以编译(并且能工作)。

set filterEvent(filterAction: any) {
   this._filterEvent.next(filterAction);
}

我怀疑这与枚举值有关,而不是 FilterAction 的实例。

答案#1

问题在于你的 getter 的返回类型。Getter 和 Setter 应该接收并返回相同类型的参数,在你的情况下是 FilterAction。但是你的 getter 返回 Observable<FilterAction>。只需不要使用 getter,更改函数名称即可。然后语言服务就会停止显示错误。在语言规范中:

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

你可以看看这个。