Typescript如何仅在条件为真时更新对象属性值并保留旧值
TypeScript 条件更新对象属性的简洁实现方案
你可以通过以下两种无冗余if语句的方式实现需求,两种方案均不需要手动声明旧属性值:
方案1:条件展开对象(生成新对象,适用于不可变数据场景)
通过展开空对象的特性,条件为假时不会覆盖原有属性,完全符合React等框架的不可变数据规范,TS可自动推导类型无报错:
// 假设这是你的原有对象 const oldObject = { updatedAt: new Date('2023-01-01'), otherProp: 'xxx' } const isUpdated: boolean = false; const updatedObject = { // 先展开原有对象的所有属性 ...oldObject, // 条件为真时展开带新值的对象,条件为假时展开空对象不做覆盖 ...(isUpdated ? { updatedAt: new Date() } : {}) }
方案2:逻辑与赋值(直接修改原对象,性能最优)
如果允许直接修改原对象,一行代码即可完成操作:
const isUpdated: boolean = true; const oldObject = { updatedAt: new Date('2023-01-01') }; // 条件为真时才执行赋值操作,条件为假时直接短路跳过 isUpdated && (oldObject.updatedAt = new Date());
两种方案都可以避免你原来写法中需要手动填写旧值的问题,不会出现旧值修改后需要同步更新赋值语句的疏漏。
内容的提问来源于stack exchange,提问作者markWanka
相关产品推荐
相关产品推荐

