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”类型。
我错过了什么?
答案 0 :(得分:1)
您可能希望使用do
而不是catch
。 catch
适用于您希望处理错误并继续观察链的场景。在catch
方法中,您应该返回链可以切换到的不同的observable。例如:
this.httpClient
.get<T>(...)
.catch(err => {
return this.cachedVersion;
);
无论如何,由于你的catch
方法中没有任何return语句,因此它返回无效。这就是为什么您的observable更改为Observable<T|{}>
,因为如果没有错误,它将是T
的链,如果有错误则会{}
。