我有一个代表从 API 返回的数据结构的类。我添加了几个方便的方法,它们将逻辑应用于这些字段以返回计算值。
当我使用 HttpClient 请求数据,然后尝试与那些便捷方法进行交互时,它不起作用。我收到一个错误:
TypeError: item.<method> is not a function. (In 'item.<method>()', 'item.<method>' is undefined)
就好像该对象没有被实例化为类 Item 的实例,只是验证了您从不将它用作除 Item 之外的任何东西。因此,类定义中定义的所有函数都没有附加到对象上。
有没有一种方法不仅可以进行类型检查,还可以强制 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;
});
这会创建一个 Items 数组。耶!问题解决了!谢谢@DeborahK