我正在angular service
中实现一个界面。我的一个方法返回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[]>`.
答案 0 :(得分:5)
这是因为在您的界面中,您将getItems
声明为字段,而不是类方法。将其更改为getItems()
,它会正常工作。 ;)
此外,在您提供的代码中,您在函数中的this
字段之前缺少items
个关键字。
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;
}
}