将带下划线的JSON响应名称映射到对象数组时,Angular2 Typescript编译错误
我是angular2的新手,正在尝试将JSON响应映射到自定义对象数组。我看到的奇怪行为是,当我试图访问一个带有下划线的变量时,我收到一个编译错误。我模仿了《英雄之旅》的代码 我的目标是:将带下划线的JSON响应名称映射到对象数组时,Angular2 Typescript编译错误,json,angular,typescript,angular2-services,Json,Angular,Typescript,Angular2 Services,我是angular2的新手,正在尝试将JSON响应映射到自定义对象数组。我看到的奇怪行为是,当我试图访问一个带有下划线的变量时,我收到一个编译错误。我模仿了《英雄之旅》的代码 我的目标是: export class EventCount { event_count: number; name: string; id: string; } 要匹配JSON响应示例,请执行以下操作: [{"event_count":10,"name":"dev-03","id":"0001"},
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调试器中,我可以清楚地看到,条目
对象中的事件计数
变量在我未在日志打印输出中使用时正在填充
想法还是想法?提前谢谢 我发现您的代码只有一个问题,与Http上angular.io文档的问题几乎相同。这与myCounts的本地定义有关,在return语句需要它的地方无法看到它。除此之外,当我用entry.event\u count替换entry.id时,一切都很顺利。我在if语句之前声明了let-myCounts:EventCount[],还删除了as-EventCount[]。因为您是Angular的新手,所以应该使用最新版本的平台。该属性在运行时存在的事实与此无关。您遇到的是一个编译错误。您可能定义了两个EventCount类或interfces,但导入了错误的类。或者您忘记保存将此属性添加到类中的更改。还要注意,为GET请求设置内容类型没有多大意义,因为GET请求没有任何内容。即使对于POST和PUT,angular也会在发送对象或数组时为您执行此操作。@JBNizet我验证了该类只有一个实例。我删除了count.service.ts中的控制台日志,并将响应一直推到了我的html中,它成功了!然而,我注意到,在
EventCount
类中,变量的名称似乎并不重要。为了进行测试,我将event_count
更改为eventcount
和event_count2
,并继续工作(同时硬刷新浏览器+重新启动npm)。现在我可以像以前一样在count.service.ts
中打印值;我不太清楚障碍在哪里。感谢GET请求上的指针。为什么要删除as
语句?我将myCounts变量声明为EventCount[]类型,因此不需要as语句