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

TypeScript实现ProcedureCode数组到ProcedureView数组的复制方法

TypeScript 跨类型数组复制最简实现

直接使用数组map方法配合对象展开运算符(Spread Operator)即可完成需求,无需手动遍历逐个赋值共有属性,TypeScript 可自动完成类型校验。

核心实现代码

假设存储ProcedureCode类型的源数组名为procedureCodeList:

const procedureViewList: ProcedureView[] = procedureCodeList.map(item => ({
  ...item,
  inventory: null,
  itemDescription: null
}));

类型兼容处理

如果项目开启了strictNullChecks严格空值校验,直接给number/string类型属性赋值null会抛出类型错误,推荐优先调整ProcedureView类型定义,匹配临时赋值null的实际运行状态:

export type ProcedureView = ProcedureCode & {
  inventory: number | null;
  itemDescription: string | null;
};

如果不想修改原类型定义,也可以通过类型断言临时绕过校验(不推荐,会丢失部分类型安全性):

const procedureViewList: ProcedureView[] = procedureCodeList.map(item => ({
  ...item,
  inventory: null as unknown as number,
  itemDescription: null as unknown as string
}));

方案优势

  • 展开运算符...item会自动浅拷贝ProcedureCode的所有自有属性,后续ProcedureCode新增/删除共有属性时,转换逻辑不需要同步修改,维护成本极低
  • 转换全程生成全新的数组和对象,不会修改原ProcedureCode数组内容,无副作用
  • 语法简洁,核心转换逻辑仅需3行,可读性强

兼容环境替代写法

如果运行环境不支持对象展开运算符(极低版本JS运行时),可以用Object.assign实现完全一致的效果:

const procedureViewList: ProcedureView[] = procedureCodeList.map(item => 
  Object.assign({}, item, {
    inventory: null,
    itemDescription: null
  })
);

注意:以上实现均为浅拷贝,当前ProcedureCode的所有属性都是原始值类型,浅拷贝可完全满足需求;如果后续ProcedureCode新增对象、数组类引用类型属性,且需要新旧对象完全独立,需要额外做深拷贝处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:27:29