类型 'Observable<any>' 不可分配给类型 'Observable<T>'
Posted
技术标签:
【中文标题】类型 \'Observable<any>\' 不可分配给类型 \'Observable<T>\'【英文标题】:Type 'Observable<any>' is not assignable to type 'Observable<T>'类型 'Observable<any>' 不可分配给类型 'Observable<T>' 【发布时间】:2018-03-09 04:27:24 【问题描述】:我有以下代码
import HttpClient from '@ngular/common/http';
private httpClient: HttpClient;
do_request(method: string,
url: string,
headers?: HttpHeaders,
content?: string,
contentType?: string): Observable<MyResponse>
let options =
observe: 'response' as 'response',
responseType: 'text' as 'text',
headers: headers,
body: content:
return this.httpClient.request(method, url, options)
.map(res=> new MyResponse(res.status, res.body))
.catch(err=>Observable.throw(new MyResponse(err.status)));
这段代码给了我以下错误
错误 TS2322:类型“Observable”不可分配给类型“Observable”。属性“源”受保护,但类型“Observable”不是从“Observable”派生的类
我正在使用 Rxjs 5.4.3、Angular 4.4.3 和 TypeScript 2.5.3。
我发现了几个可能的错误来源并尝试了建议的解决方案,但没有成功:
Typescript version(我降级到2.3,结果相似) 导入一个也依赖于 rxjs using npm link 的包(我在本地安装,结果相同)。对于如何解决此问题的任何建议,我将不胜感激。
【问题讨论】:
如果删除catch
块会发生这种情况吗?
@Meir 错误更改:类型“Observable根据您的评论,我认为您应该明确输入类型,因此,导入 Observable 并声明类型:
return this.httpClient.request(method, url, options)
.map((res): MyResponse => new MyResponse(res.status, res.body))
.catch((err):Observable<MyResponse> => Observable.throw<MyResponse>(new MyResponse(err.status)));
重要的部分是throw
(以及from
和其他运算符)可以输入,语法是`Observable.operator(operands...)
【讨论】:
显然这解决了问题,但现在我有错误:类型'Observable以上是关于类型 'Observable<any>' 不可分配给类型 'Observable<T>'的主要内容,如果未能解决你的问题,请参考以下文章
类型 '() => Observable<any>' 上不存在属性 'subscribe'
类型 '[]' 不可分配给 ionic 2 中的类型 'Observable<any[]>'
“MonoTypeOperatorFunction<any>”类型的参数不可分配给“UnaryFunction<Observable<any>, Observable
错误 TS2339: 类型 'Observable<HttpEvent<any> 上不存在属性 'do'