Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将带下划线的JSON响应名称映射到对象数组时,Angular2 Typescript编译错误_Json_Angular_Typescript_Angular2 Services - Fatal编程技术网

将带下划线的JSON响应名称映射到对象数组时,Angular2 Typescript编译错误

将带下划线的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"},

我是angular2的新手,正在尝试将JSON响应映射到自定义对象数组。我看到的奇怪行为是,当我试图访问一个带有下划线的变量时,我收到一个编译错误。我模仿了《英雄之旅》的代码

我的目标是:

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语句