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] 输入 'Observable<{} | T>' 不可分配给类型 'Observable'。输入“{} | T' 不能分配给类型 'T'。类型“{}”不可分配给类型“T”。
我错过了什么?
您可能想要使用do
而不是catch
. catch
适用于您想要处理错误并继续可观察链的场景。在一种catch
方法中,您应该返回链可以切换到的不同 observable。例如:
this.httpClient
.get<T>(...)
.catch(err => {
return this.cachedVersion;
);
无论如何,由于您的catch
方法中没有任何 return 语句,因此它返回 void。这就是为什么您的 observable 会更改为,Observable<T|{}>
因为T
如果没有错误和{}
有错误,它将是一个发出的链。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句