我有一個表示從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
不幸的是,這似乎並沒有奏效。爲了增加清晰度,我將用我試過的代碼更新這個問題。 –
得到它的工作!感謝您的幫助 –