我是新来的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