2017-05-26 26 views
0

我是新來的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對象。

想法或想法?提前致謝!

+1

該屬性在運行時存在的事實是無關緊要的。你有什麼是**編譯**錯誤。您可能定義了兩個EventCount類或interfces,並導入了錯誤的一個。或者您忘記保存將此屬性添加到課程的更改。另外請注意,爲GET請求設置內容類型沒什麼意義,因爲GET請求沒有任何內容。即使對於POST和PUT,發送對象或數組時,angular也會爲你做。 –

+0

@JBNizet我證實了這個類只有一個實例。我刪除了count.service.ts中的控制檯日誌,並將響應一直推送到我的html,並且它工作正常!但是,我注意到它並沒有影響我在「EventCount」類中命名的變量。爲了測試,我將event_count改成了eventcount和event_count2並繼續工作(也刷新了瀏覽器+重新啓動的npm)。現在我可以在'''count.service.ts''中打印出我想要的值了;我不完全確定這個障礙在哪裏。感謝GET請求上的指針。 – aspergillusOryzae

回答

0

我看到您的代碼只有一個問題,它幾乎與Http上的angular.io文檔相同。這與myCounts的本地定義有關,在返回語句需要它的地方無法看到它。除此之外,當我用entry.event_count替換entry.id時,一切都很順利。我聲明讓myCounts:EventCount []在你的if語句之前,也刪除了EventCount []。由於你是Angular的新手,你應該使用最新版本的平臺。

+0

爲什麼要刪除'''as'''語句? – aspergillusOryzae

+0

我聲明瞭類型爲EventCount []的myCounts變量,因此不需要as語句 – GeorgeAnagnostopoulos

相關問題