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 而不是 catchcatch 适用于您想要处理错误并继续可观察链的场景。在 catch 方法中,您应该 return 链可以切换到的不同可观察对象。例如:

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

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