当对象中的数据比预期的多时,我目前在将详细模型更改为不太详细的更新模型时遇到问题。尽管有Typescript,但可能是后端向我发送的数据比我在模型中期望的要多,然后又向回发送了太多数据,因为我不知道它们存在某些属性。
让我给你举个小例子:
CarModel
UpdateCarModel
从后端收到的对象:
这是我当前的代码,它不会检测并删除其他属性:
import { merge as lodashMerge } from 'lodash';
public static buildFromCarModel(car: CarModel): UpdateCarModel {
let clone = lodashMerge(new UpdateCarModel(), car);
delete clone.manufacturer;
delete clone.model;
return clone;
}
现在的问题是,后端需要一个仅包含颜色的更新模型,但是隐式地将构建年份拖入了代码中。有没有一种方法可以给对象一个模型作为一种模板,并且只保留我期望的模型中的属性?
编辑:带标记的重复项中提出的解决方案对我来说很难使用,因为我必须指定所有属性以及所有方法,我更喜欢只读取和传输属性的解决方案,但没有功能
答案 0 :(得分:0)
如果我理解您的问题是对的。然后,可能需要执行以下操作。请注意,您必须根据需要进行修改。
let requiredCar = {
color: null
}
let car = {
color: 'red',
other: 'properties'
}
function map(model, requiredModel) {
var retObj = {};
Object.getOwnPropertyNames(requiredModel).forEach(key => {
retObj[key] = model[key];
})
return retObj;
}
console.log(map(car, requiredCar));