rxjs - [ts]输入'Observable&lt; {} | T&GT;”不能分配给'Observable <t>'

时间:2017-07-24 05:17:04

标签: rxjs observable rxjs5

    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服务周围有这个包装函数。没有指定返回类型,它工作正常。但是,如果我提供相同的'httpClient.get()'返回类型是Observable,则会抛出错误

  

[ts]输入'Observable&lt; {} | T&GT;”不能分配给类型   “可观测”。输入“{} | T'不能赋值为'T'。类型   “{}”不能指定为“T”类型。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

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

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

无论如何,由于你的catch方法中没有任何return语句,因此它返回无效。这就是为什么您的observable更改为Observable<T|{}>,因为如果没有错误,它将是T的链,如果有错误则会{}