【问题标题】:rxjs - [ts] Type 'Observable<{} | T>' is not assignable to type 'Observable<T>'rxjs - [ts] 类型 'Observable<{} | T>' 不可分配给类型 'Observable<T>'
【发布时间】:2017-12-29 14:18:56
【问题描述】:
    public get<T>(url: string, httpParams: Array<Map<string, string>>): Observable<T> {
    return this.httpClient
        .get<T>(url, { params: this.appendHttpParams(httpParams), headers: this.httpHeaders })
        .catch((error, some): any => {
            console.log(error);
        });

}

我在 Angular 4 中围绕我的 http 服务有这个包装函数。它可以在没有指定返回类型的情况下正常工作。但是,如果我提供与 Observable 的“httpClient.get()”相同的返回类型,则会引发错误

[ts] 类型'可观察的' 不可分配给类型 “可观察”。输入'{} | T' 不能分配给类型 'T'。类型 '{}' 不能分配给类型 'T'。

我错过了什么?

【问题讨论】:

    标签: rxjs observable rxjs5


    【解决方案1】:

    您可能想使用do 而不是catchcatch 适用于您想要处理错误并继续可观察链的场景。在 catch 方法中,您应该返回链可以切换到的不同可观察对象。例如:

    this.httpClient
        .get<T>(...)
        .catch(err => {
            return this.cachedVersion;
        );
    

    无论如何,由于您的 catch 方法中没有任何 return 语句,因此它返回 void。这就是为什么您的 observable 更改为 Observable&lt;T|{}&gt; 的原因,因为它将是一个链,如果没有错误,则发出 T,如果有错误,则发出 {}

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 1970-01-01
      • 2018-03-09
      • 2017-03-30
      • 2020-11-12
      • 2020-04-17
      • 2018-11-02
      • 2018-08-14
      • 2021-01-02
      相关资源
      最近更新 更多