在TypeScript中复制嵌套对象并更新特定部分可以通过多种方式实现,以下是几种常见的方法:
这种方法适用于任意深度的嵌套对象。
function deepCopyAndUpdate<T>(obj: T, updater: (obj: T) => void): T {
const newObj = JSON.parse(JSON.stringify(obj));
updater(newObj);
return newObj;
}
// 示例使用
const originalObj = {
a: 1,
b: {
c: 2,
d: {
e: 3
}
}
};
const updatedObj = deepCopyAndUpdate(originalObj, (obj) => {
obj.b.d.e = 4;
});
console.log(updatedObj); // { a: 1, b: { c: 2, d: { e: 4 } } }
Lodash提供了cloneDeep
和merge
等函数,可以方便地处理深拷贝和更新。
import _ from 'lodash';
const originalObj = {
a: 1,
b: {
c: 2,
d: {
e: 3
}
}
};
const updatedObj = _.cloneDeep(originalObj);
_.merge(updatedObj, { b: { d: { e: 4 } } });
console.log(updatedObj); // { a: 1, b: { c: 2, d: { e: 4 } } }
这种方法更加类型安全,适用于需要严格类型检查的场景。
type DeepPartial<T> = {
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};
function deepCopyAndUpdate<T>(obj: T, updater: (obj: DeepPartial<T>) => void): T {
const newObj = JSON.parse(JSON.stringify(obj)) as T;
updater(newObj);
return newObj;
}
// 示例使用
const originalObj = {
a: 1,
b: {
c: 2,
d: {
e: 3
}
}
};
const updatedObj = deepCopyAndUpdate(originalObj, (obj) => {
obj.b.d.e = 4;
});
console.log(updatedObj); // { a: 1, b: { c: 2, d: { e: 4 } } }
JSON.parse(JSON.stringify(obj))
方法会导致错误。在这种情况下,应使用专门的库如Lodash来处理。通过上述方法,可以在TypeScript中有效地复制并更新嵌套对象,同时保持代码的清晰和类型安全。
领取专属 10元无门槛券
手把手带您无忧上云