加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 链接可观察量时正确推断类型

发布时间:2020-12-17 07:20:22 所属栏目:安全 来源:网络整理
导读:我有一个Angular2应用程序,它有一个获取项目列表的服务.有一种方法可以为列表中的每个项目获取更多特定信息.我目前的设置是: // service for item listclass ItemsService { fetchItems(): ObservableItem[] { return this.http.get(url).map((res: Respons
我有一个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似乎有点时髦,但它最终给了我一个包含所有项目信息的项目数组的可观察性.

问题是,在返回this.fetchItems()行时我总是得到:

06001

我有点不知所措,因为fetchItems确实返回一个Observable并将其更改为Observable< any>给出了同样的错误.如果我只是将其更改为任何,但我根本没有得到任何错误报告.

有没有更好的类型用于fetchItems?

我怀疑这可能与toArray()有关,它返回Observable< T []>.

在您定义fetchItems()的情况下:Observable< Item []>它使toArray()返回Observable< Observable< Item []> []>这就是为什么即使使用Observable< any>它也会抛出错误.

顺便说一句,我试图用模拟类来模拟你的情况,它编译时没有错误(TypeScript 2.0.3),但也许我在某个地方犯了一个错误,它不相同(?):

class Observable<T> {
    map(_): Observable<T> { return new Observable<T>() }
    flatMap(_): Observable<T> { return new Observable<T>() }
    toArray(): Observable<T[]> { return new Observable<T[]>() }
}
class Item { }
class Response {
    json() { }
}
class HTTP {
    get(_) { return new Observable() }
}


class ItemsService {
    itemService = new ItemService();
    http = new HTTP();

    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 {
    http = new HTTP();

    fetchData(item: Item) {
        return this.http.get('url')
            .map((res: Response) => res.json());
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读