2017-09-27 60 views
0

我有以下代碼類型「可觀察<any>」是不能分配給輸入「可觀察<T>」

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)));      
}  

此代碼是給我下面的錯誤

error TS2322: Type 'Observable' is not assignable to type 'Observable'. Property 'source' is protected but type 'Observable' is not a class derived from 'Observable'

我使用Rxjs 5.4 .3,Angular 4.4.3和TypeScript 2.5.3。

我已經發現了幾個可能的誤差來源,並沒有運氣嘗試建議的解決方案:

我會很感激任何有關如何解決此問題的建議。

+0

如果您刪除了'catch'塊,它會發生嗎? – Meir

+0

@Meir錯誤更改:類型'Observable '不可分配爲鍵入'Observable '。這個名稱存在兩種不同的類型,但它們不相關。 我刪除了我的代碼中的重複依賴項(正如我在問題中所解釋的)。但可能這與我使用新的角度/通用/ http模塊的事實有關 – pablochacin

回答

0

基於您的評論,我想你應該在你的分型明確,因此,進口可觀察和申報類型:

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(操作數...)

+1

顯然這解決了這個問題,但現在我有錯誤: 類型'Observable '不能分配到'Observable < SeamHttpResponse>」。這個名稱存在兩種不同的類型,但它們不相關。屬性'來源'是受保護的,但類型'Observable '不是從'Observable ' 派生的類我想這與一些具有從rxjs的依賴關係的包有關。在確認解決方案之前,我需要驗證一下。謝謝 – pablochacin

+0

您不能將相同的解決方案應用於新的錯誤嗎? – Meir

+0

顯然,這個新的錯誤是因爲我導入了兩次rxjs。我曾期待過這樣的事情發生,我爲這個問題開了另一個問題。 – pablochacin

相關問題