我有一个表示从API返回的数据结构的类。我添加了一些便利方法,它们将逻辑应用于这些字段以返回计算值。将HttpResponse强制转换为指定类型的项目,并使用自定义方法完成
当我使用HttpClient请求数据,然后尝试与这些便捷方法进行交互时,它不起作用。我得到一个错误:
TypeError: item.<method> is not a function. (In 'item.<method>()', 'item.<method>' is undefined)
这是因为如果该对象未实例化类项目的实例,它只是验证,你从来没有把它当作什么,但一个项目。所以,在类定义中定义的所有函数都不会附加到对象上。
有没有办法不只是类型检查,而是强制JSON成为Item类型的实际对象?
我想我可以添加一个构造函数,它接受通用对象并将所有字段复制到新对象的字段中。但是,这不仅看起来效率很低,而且还有代码味道。
是否有一种干净的方式来获取从HttpClient/HttpResponse返回的对象,以包含这些便利功能?
我尝试使用Object.assign()
作为@DeborahK建议:
return this.http.get<Item[]>(`${this.apiUrl}/view/projects`, this.options)
.map((response: HttpResponse<Item[]>) => {
var result = Object.assign(new Array<Item>(),response.body);
console.log(result);
return result;
});
什么被写入到控制台是一个数组,它包含所有的数据,但没有一个元素都是项目。可能是因为我没有创建一个项目数组,我创建了一个应该包含项目的数组。
所以我修改了它,像这样:
return this.http.get<Item[]>(`${this.apiUrl}/view/projects`, this.options)
.map((response: HttpResponse<Item[]>) => {
var result = response.body.map((item:Item) =>
Object.assign(new Item(),item));
console.log(result);
return result;
});
以及创建项目的数组。好极了!问题解决了!谢谢@DeborahK
不幸的是,这似乎并没有奏效。为了增加清晰度,我将用我试过的代码更新这个问题。 –
得到它的工作!感谢您的帮助 –