2017-06-14 157 views
0

我正在尝试观察发生在流中的最新事件。每个事件可以是两种类型中的一种,由枚举表示。然而,我在下面的例子中得到一个编译错误:RXJS Observable枚举类型,类型'Observable <Type>'不可分配为'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): error TS2322: Type 'Observable<FilterAction>' is not assignable to type 'FilterAction'

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

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

我怀疑它的东西与枚举值来做,而不是的FilterAction实例。

+0

哪一行是第14行? – 2017-06-14 11:17:39

+0

'return this._filterEvent.asObservable();' – Matt

回答

4

问题是您的getter的返回类型。 Getter s和Setter s应取和返回相同类型的参数,在您的情况下为FilterAction。但您的getter返回Observable<FilterAction>。只是不要使用getter,更改函数的名称。然后语言服务停止显示错误。在语言规范中:

If both accessors include type annotations, the specified types must be identical.

您可以检查this

+0

是的!这很有道理 - 谢谢! – Matt

相关问题