rxjs - [ts] 类型 'Observable<{} | T>' 不可分配给类型 'Observable<T>'
rxjs - [ts] Type 'Observable<{} | T>' is not assignable to type 'Observable<T>'
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 服务周围有这个包装函数。它在没有指定 return 类型的情况下工作正常。但是,如果我提供与可观察的 'httpClient.get()' 相同的 return 类型,它会抛出一个错误
[ts] Type 'Observable<{} | T>' is not assignable to type
'Observable'. Type '{} | T' is not assignable to type 'T'. Type
'{}' is not assignable to type 'T'.
我错过了什么?
您可能想使用 do
而不是 catch
。 catch
适用于您想要处理错误并继续可观察链的场景。在 catch
方法中,您应该 return 链可以切换到的不同可观察对象。例如:
this.httpClient
.get<T>(...)
.catch(err => {
return this.cachedVersion;
);
无论如何,由于您的 catch
方法中没有任何 return 语句,因此 return 无效。这就是为什么您的 observable 更改为 Observable<T|{}>
的原因,因为它将是一个链,如果没有错误则发出 T
,如果有错误则发出 {}
。
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 服务周围有这个包装函数。它在没有指定 return 类型的情况下工作正常。但是,如果我提供与可观察的 'httpClient.get()' 相同的 return 类型,它会抛出一个错误
[ts] Type 'Observable<{} | T>' is not assignable to type 'Observable'. Type '{} | T' is not assignable to type 'T'. Type '{}' is not assignable to type 'T'.
我错过了什么?
您可能想使用 do
而不是 catch
。 catch
适用于您想要处理错误并继续可观察链的场景。在 catch
方法中,您应该 return 链可以切换到的不同可观察对象。例如:
this.httpClient
.get<T>(...)
.catch(err => {
return this.cachedVersion;
);
无论如何,由于您的 catch
方法中没有任何 return 语句,因此 return 无效。这就是为什么您的 observable 更改为 Observable<T|{}>
的原因,因为它将是一个链,如果没有错误则发出 T
,如果有错误则发出 {}
。