You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅更新TypeScript可选对象属性?以AircraftInfo的pos为例

优化TypeScript中AircraftInfo的pos属性更新逻辑

你定义的TypeScript接口如下:

export interface AircraftInfo {
  timestamp: Date
  icao: string
  ident?: {
    callsign: string
  }
  pos?: {
    lat: number
    lon: number
    altitude: number
  }
}

原更新pos的逻辑可以通过以下几种更简洁的方式实现:

方式一:原地修改(保持原pos引用)

利用空值合并赋值运算符??=简化判断,直接修改内部属性:

// 若pos不存在则先初始化空对象,再更新属性
info.pos ??= {};
info.pos.lat = lat;
info.pos.lon = lon;
info.pos.altitude = altitude;

??=会在info.pos为undefined或null时才赋值空对象,之后直接更新三个属性即可,完全替代原有的if-else逻辑。

方式二:创建新对象替换pos

如果允许替换原pos对象(不要求保持引用),可以用对象展开运算符:

info.pos = { ...info.pos, lat, lon, altitude };

展开运算符会把现有pos的属性全部复制,再覆盖传入的新属性。若pos原本不存在,展开undefined会被忽略,自动生成包含三个属性的新对象。

方式三:使用Object.assign合并属性

和方式二逻辑类似,通过Object.assign实现属性合并:

info.pos = Object.assign(info.pos ?? {}, { lat, lon, altitude });

info.pos ?? {}确保合并的目标对象存在,再把新属性合并进去,最终赋值给info.pos。

选择建议

  • 若需要保持原pos对象的引用(比如其他地方还在引用该对象),优先选方式一,和原逻辑行为完全一致且代码更简洁。
  • 若不需要保持引用,方式二的写法最简洁直观。

内容的提问来源于stack exchange,提问作者Kon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:55:12