Javascript Typescript解析模型中响应的最佳方法
Iam使用API,该API会返回有关我的smarthome设备的信息。 我想解析此API提供的灯光列表。 为此,我在角度应用程序中创建了一个Javascript Typescript解析模型中响应的最佳方法,javascript,angular,typescript,object,model,Javascript,Angular,Typescript,Object,Model,Iam使用API,该API会返回有关我的smarthome设备的信息。 我想解析此API提供的灯光列表。 为此,我在角度应用程序中创建了一个模型,该模型应类似于响应: 导出类LightsModel{ 公共lightModel:lightModel } 导出类LightModel{ 公共国家:国家模式; } 导出类状态模型{ 公共开启:布尔; } 也许这是一种构造模型的过度方法,但实际上响应非常大,所以我喜欢将模型拆分为多个类,以便以后在单个实例上更容易操作。 答复如下: { "1": {
模型
,该模型应类似于响应:
导出类LightsModel{
公共lightModel:lightModel
}
导出类LightModel{
公共国家:国家模式;
}
导出类状态模型{
公共开启:布尔;
}
也许这是一种构造模型的过度方法,但实际上响应非常大,所以我喜欢将模型拆分为多个类,以便以后在单个实例上更容易操作。
答复如下:
{
"1": {
state: { on: true }
},
"2": {...},
"3": {...}
}
我的问题是,我的模型不符合响应,因为我得到了可变数量的灯光,所以我不能使用硬编码结构。是否有一种方法可以根据响应动态缩放模型?我可能需要更多详细信息,但似乎您只需要设置
LightsModel
以支持LightModel
数组
比如:
export class LightsModel {
public lightModels: LightModel[]
}
我可能需要更多的细节,但似乎您只需要设置
LightsModel
来支持LightModel
s数组
比如:
export class LightsModel {
public lightModels: LightModel[]
}
有几种方法可以解决这个问题 选项1:用于……中
for (const lightId in myApiResponse) {
const yourLight: LightModel = myApiResponse[lightId];
//do something here
}
这是文件
选项2:使用Object.keys()
以下是文档:
在定义类时,请将LightsModel更改为:
interface MyInterface {
[lightId: string]: LightModel;
}
希望这有帮助,
艾萨克有几种方法可以解决这个问题 选项1:用于……中
for (const lightId in myApiResponse) {
const yourLight: LightModel = myApiResponse[lightId];
//do something here
}
这是文件
选项2:使用Object.keys()
以下是文档:
在定义类时,请将LightsModel更改为:
interface MyInterface {
[lightId: string]: LightModel;
}
希望这有帮助,
艾萨克我使用了第二种方法,效果很好。非常感谢。但有一个问题;在t=>data[t]中,“t”的含义是什么。它代表什么?你不是第一个问我这个的人。在C#中使用lambda函数时,“t”是隐式标准。C#中的Lambda函数相当于TypeScript/Javascript中的箭头函数。最好的解释是,t只是一个变量名。我可以很容易地完成以下工作:keys.map(key=>myApiResponse[key]作为LightModel);我使用了第二种方法,效果很好。非常感谢。但有一个问题;在t=>data[t]中,“t”的含义是什么。它代表什么?你不是第一个问我这个的人。在C#中使用lambda函数时,“t”是隐式标准。C#中的Lambda函数相当于TypeScript/Javascript中的箭头函数。最好的解释是,t只是一个变量名。我可以很容易地完成以下工作:keys.map(key=>myApiResponse[key]作为LightModel);