【发布时间】:2017-03-08 01:43:39
【问题描述】:
我有一个 Angular2 应用程序,它具有获取项目列表的服务。还有一种方法可以为列表中的每个项目获取更具体的信息。我目前的设置是:
// service for item list
class ItemsService {
fetchItems(): Observable<Item[]> {
return this.http.get(url).map((res: Response) => res.json());
}
fetchItemsWithData(): Observable<Item[]> {
return this.fetchItems()
.flatMap((items: Observable<Item[]>) => items)
.map((item: Item) => this.itemService.fetchData(item))
.flatMap((items: Observable<Item[]>) => items)
.toArray();
}
}
// service for individual items
class ItemService {
fetchData(item: Item) {
return this.http.get(`${url}/${item.id}`)
.map((res: Response) => res.json());
}
}
这实际上完全按照我的需要工作,尽管数组 observable 看起来有点时髦,但它最终给了我一个包含所有项目信息的项目数组的 observable。
问题是,在return this.fetchItems() 行我总是得到:
The type argument for type parameter 'T' cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate 'Item[]' is not a valid type argument because it is not a supertype of candidate 'Observable<Item[]>'. Property 'length' is missing in type 'Observable<Item[]>'.
我有点不知所措,因为 fetchItems 确实返回了 Observable 并将其更改为 Observable<any> 给出了相同的错误。如果我只是将其更改为 any 虽然我根本没有收到任何错误报告。
fetchItems 有更好的类型吗?
【问题讨论】:
标签: angular typescript rxjs