2017-06-14 18 views
0

ストリームで発生する最新のイベントを監視しようとしています。各イベントは、列挙型で表される2つのタイプのいずれかになります。しかし、私は、次の例ではコンパイルエラーを取得しています:RXJS Observable enum type、タイプ '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); 
    } 
} 

コンパイルエラー:私は、一般的なanyを使用する場合 behave.ts(14,12): error TS2322: Type 'Observable<FilterAction>' is not assignable to type 'FilterAction'

は、しかし、それはコンパイル(と動作します)。

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

私はFilterActionのインスタンスとは対照的に、それは、列挙型の値とは何かだと思います。

+0

14行目はどの行ですか? –

+0

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

答えて

4

問題は返品のタイプがgetterです。 GetterおよびSetterは、同じ種類のパラメータを取得して返す必要があります。ケースではFilterActionです。しかしgetterObservable<FilterAction>を返します。ちょうどgetterを使用しないで、機能の名前を変更してください。その後、言語サービスのエラーが表示されなくなります。言語仕様:

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

thisを確認できます。

+0

はい!それは意味をなさない - ありがとう! – Matt

関連する問題