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

JavaScript/TypeScript能否在单条语句中同时保留原变量名与解构赋值

解答

截至2024年,JavaScript 和 TypeScript 均未原生支持你设想的「参数位同时保留原对象引用+解构字段」的语法,你示例中的car & { speed }、rect & { left, top }这类写法不属于现有标准支持的语法,暂时无法直接使用。

现有可替代的实现方案

你目前使用的「单独写解构语句」是所有可行方案中可读性最高、性能最优的写法,即使箭头函数需要额外加块级作用域,也不会带来额外的运行开销,是业内通用的标准写法。

如果确实希望减少代码行数,可以参考以下两种折衷方案:

方案1:使用自执行函数简化箭头函数写法

仅适合逻辑非常简单的场景,可读性略低:

cars.forEach(rect => (({ left, top }) => ({
  left,
  top,
  intersection: rect.intersect(anotherRect)
}))(rect))

方案2:封装通用工具函数

适合需要高频使用这类逻辑的场景:

// 通用工具:传入对象和需要提取的字段,返回原对象+字段的组合
const pickWithOrigin = <T, K extends keyof T>(obj: T, keys: K[]) => {
  return {
    origin: obj,
    ...Object.fromEntries(keys.map(key => [key, obj[key]]))
  } as { origin: T } & Pick<T, K>
}

// 使用示例
cars.forEach(rect => {
  const { origin, left, top } = pickWithOrigin(rect, ['left', 'top'])
  return {
    left,
    top,
    intersection: origin.intersect(anotherRect)
  }
})

补充说明

目前 TC39 没有相关语法提案进入标准化流程,TypeScript 团队也没有计划在 ECMAScript 标准之外单独支持这类语法,短期内无法通过原生语法实现你设想的写法。

内容的提问来源于stack exchange,提问作者hopeless-programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:04