我是新來的angular2,並試圖將JSON響應映射到自定義對象數組。我看到的奇怪行爲是當我試圖訪問一個帶有下劃線的變量時,我收到一個編譯錯誤。我模仿了英雄之旅代碼。當將JSON響應名稱與下劃線映射到對象數組時,Angular2 Typescript編譯時發生錯誤
我的對象是:
export class EventCount {
event_count: number;
name: string;
id: string;
}
要匹配的JSON響應樣本:
[{"event_count":10,"name":"dev-03","id":"0001"},
{"event_count":6,"name":"dev-02","id":"0002"}]
我http.get請求如下所示:
getEventCounts(): Observable<Array<any>> {
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
let query = this.getEventCountURL;
return this.http.get(query, options)
.map(this.extractCounts)
.catch(this.handleError);
}
而且函數調用中地圖看起來像:
private extractCounts(response: Response) {
if (response != null) {
try {
let myCounts = response.json() as EventCount[];
for (let entry of myCounts) {
console.log("Name: " + entry.name + ", id: " + entry.id);
}
} catch (e) {
console.error(e.toString());
}
}
return myCounts;
}
上面的代碼工作正常,我在控制檯日誌中收到正確的輸出。
Name: dev-03, id: 0001
Name: dev-02, id: 0002
然而,當我在日誌更改爲以下:
console.log("Name: " + entry.name + ", count: " + entry.event_count);
我得到一個編譯錯誤:
ERROR in .../count.service.ts: Property 'event_count' does not exist on type 'EventCount'.
在VSCode調試器,我可以清楚地看到,內event_count
變量當我不在日誌打印輸出中使用它時,將會填充entry
對象。
想法或想法?提前致謝!
該屬性在運行時存在的事實是無關緊要的。你有什麼是**編譯**錯誤。您可能定義了兩個EventCount類或interfces,並導入了錯誤的一個。或者您忘記保存將此屬性添加到課程的更改。另外請注意,爲GET請求設置內容類型沒什麼意義,因爲GET請求沒有任何內容。即使對於POST和PUT,發送對象或數組時,angular也會爲你做。 –
@JBNizet我證實了這個類只有一個實例。我刪除了count.service.ts中的控制檯日誌,並將響應一直推送到我的html,並且它工作正常!但是,我注意到它並沒有影響我在「EventCount」類中命名的變量。爲了測試,我將event_count改成了eventcount和event_count2並繼續工作(也刷新了瀏覽器+重新啓動的npm)。現在我可以在'''count.service.ts''中打印出我想要的值了;我不完全確定這個障礙在哪裏。感謝GET請求上的指針。 – aspergillusOryzae