javascript - 从 API 数据分配嵌套数组对象
问题描述
我有一个 Angular 的 TypeScript 类,如下所示:
import {HotelModel} from './hotel.model';
import {LocationModel} from './location.model';
export class CountryModel {
id: number;
name: string;
description: string;
countryFlagImagePath: string;
themeFotoImagePath: string;
hotels: HotelModel[];
locations: LocationModel[];
constructor(values: Object = {}) {
Object.assign(this, values);
}
}
我从 API 检索数据,其中模型对象与这些相似。构造assign
函数中的 工作正常,直到我到达嵌套模型属性。
例如数组HotelModel
。然后它只是将数据分配给普通对象数组而不是HotelModel
.
嵌套属性是否有任何简单的方法(类似于对象分配,我不需要关心分配每个简单的类成员)?(如果可能对于嵌套 X 次的属性)?
解决方案
最直接的方法是利用常见的typescript JSON object mapper library之一
如果你用它作为 NPM 上的关键字搜索,你会发现其中的一些。大多数这些库通过使用 typescript 属性装饰器来定义如何将这些属性从普通对象/JSON 映射到新实例化的 JavaScript/TypeScript 类对象来实现映射功能。
我认为这正是您所需要的。但是,我不得不从您的代码示例中说,我没有看到这样做的真正好处。大多数情况下,您不需要真正的类对象,除非该对象涉及某种具有自己的类方法的业务逻辑。当类是来自端点响应的直接映射时,这通常不是最佳实践。
所以我建议,在你的场景中,使用接口而不是类,并且不要为映射它们而烦恼。
推荐阅读
- django - django 1.8 教程第 6 部分
- express - nginx SSL重定向不起作用
- sql-server - 连接正忙于另一个命令的结果
- c++ - 通过 avx 指令矢量化间接访问
- asp.net-core - 如何在 .net 核心的 IActionResult 名称中使用“For”关键字?
- c++ - C++ nlohmann JSON 获取数组的名称
- python - 所有多线程程序都在 GPU 上运行吗?
- javascript - 在 selenium 中使用 getElementsByClassName 时,js.executeScript 不起作用
- c++ - 来自 lineEdit 的 Qt 值和来自 QCheckBox 的 isChecked 未按预期工作
- sql-server - 如何处理 SQL Server Management Studio 中的作业失败?