2017-06-14 158 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

相關問題