2017-05-26 41 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