2017-02-01 29 views
1

angular serviceにインターフェイスを実装しています。私のメソッドの1つがobservable arrayを返すので、インタフェースでそのシグネチャを定義したいと思います。これは私がそれをやろうとしています方法です:エラー:サービスがインターフェイスを正しく実装していません

import {Observable} from 'rxjs/Observable'; 

export interface IItemStore<T> { 
    getItems: Observable<Array<T>>; 
} 

@Injectable 
export class ItemStore implements IItemStore<Item>{ 
    items: Observable<Array<Item>>; 
    getItems(): Observable<Array<Item>>{ 
     return items; 
    } 
} 

これは私が取得エラーです:

class `ItemStore` incorrectly implements interface `IItemStore<Item>`. Types of `getItems` are incompatible. Types of property `() => Observable<Item[]>` is not assignable to type `Observable<Item>`. Property `_isScalar` is missing in type `() => Observable<Item[]>`. 

答えて

5

あなたのインターフェイスでは、フィールドではなく、クラスメソッドとしてgetItemsを宣言したので、それがあります。それをgetItems()に変更しても問題ありません。 ;) また、提供したコードでは、itemsフィールドの前にthisキーワードがありません。

PS:Angular2コードの場合は、関数呼び出しとして@Injectable()を使用する必要があります。

フル・コード・ソリューション:

import {Observable} from 'rxjs/Observable'; 

export interface IItemStore<T> { 
    getItems(): Observable<Array<T>>; 
} 

class Item {} 

@Injectable() 
export class ItemStore implements IItemStore<Item> { 
    items: Observable<Array<Item>>; 
    getItems(): Observable<Array<Item>>{ 
     return this.items; 
    } 
} 
関連する問題