输入&#39; Observable <any>&#39;不能分配给&#39; Observable <t>&#39;

时间:2017-09-27 15:39:23

标签: angularjs typescript rxjs

我有以下代码

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:键入&#39; Observable&#39;不能分配给&#39; Observable&#39;。财产来源&#39;受到保护,但键入&#39; Observable&#39;不是来自&#39; Observable&#39;

的类

我使用的是Rxjs 5.4.3,Angular 4.4.3和TypeScript 2.5.3。

我发现了几个可能的错误来源并尝试了建议的解决方案,但没有运气:

我将很感激有关如何解决此问题的任何建议。

1 个答案:

答案 0 :(得分:0)

根据你的评论,我认为你应该在你的打字中明确,因此,导入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 ...)