2017-10-13 93 views
0

我有以下的代碼打字稿:智能感知不承認使用方法返回正確的類型http.post

getLoggingCsvRecords(recId: string) { 
    const url = this.apiurl + 'loggingcsvrecordsforrecid'; 
    return this.http.post<Array<string>>(url, {recId}) 
         .map(data => data['results']); 
    } 

我希望智能感知認識到,由getLoggingCsvRecords()方法返回類型爲Obsevable<Array<string>> 。 相反,智能感知暗示Observable<any>是正確的類型。 我錯在哪裏?

我正在使用VSCode作爲IDE。

回答

2

您在錯誤的地方返回簽名。

GetLoggingRecords(recId: string): Observable<Array<string>> { 
    Your code 

    return this.http.post(rest of stuff) 
} 
+0

我讀的地方可能寫出'http.post ()'但可能我不明白真正意義上的 – Picci

+0

這可能是您要避免 –

-1

根據你寫的內容,HTTP Post返回一個字符串數組。但是,您似乎將其映射爲一個對象。

也許你的意思是這樣的?

interface ILoggingRecord { 
    results: string; 
} 

// ... 

getLoggingCsvRecords(recId: string) { 
    const url = this.apiurl + 'loggingcsvrecordsforrecid'; 
    return this.http.post<Array<ILoggingRecord>>(url, {recId}) 
     .map(data => data['results']); 
} 

該調用應該能夠理解數據是一個對象數組。因此地圖的結果是一個字符串。如果這不起作用,請嘗試使用data => data.results。對屬性的字符串訪問可能會混淆語法分析器。

+0

不行的,因爲這是仍然可觀察

+0

強權鑄造值得檢查官方文件,因爲很難說確切的回報類型。 https://angular.io/guide/http#typechecking-the-response但總結「然而,你可以告訴HttpClient響應是什麼類型,這是建議的」,如上所述。 –

相關問題