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

如何在TypeScript中实现对象间同名属性值的复制?

实现TypeScript的属性复制函数fillValuesFromObject

需求很明确:我们有Object1和Object2两个类,要写一个fillValuesFromObject函数,把Object2实例中与Object1同名的属性值复制到Object1实例里,自动忽略Object2的额外属性和方法。

下面提供两种实用的实现方式:

方式一:通用泛型实现(推荐)

这种方式不需要硬编码属性名,不管Object1的属性后续怎么修改,函数都能正常工作,通用性强:

function fillValuesFromObject<T extends object, U extends object>(target: T, source: U): void {
  // 遍历目标对象的所有可枚举属性键
  Object.keys(target).forEach(key => {
    // 确认源对象包含该属性后再赋值,避免覆盖为undefined
    if (key in source) {
      (target as Record<string, unknown>)[key] = source[key as keyof U];
    }
  });
}

原理说明

  • 用泛型T和U约束输入的目标对象和源对象都是合法的对象类型
  • 通过Object.keys(target)获取Object1实例的所有属性键,确保只处理Object1存在的属性
  • 检查源对象Object2是否包含该属性,存在则赋值给目标对象,自动跳过time、frame这类额外属性以及方法

方式二:手动解构赋值(适合属性固定的场景)

如果Object1的属性很少且不会频繁变更,直接解构赋值更直观:

function fillValuesFromObject(target: Object1, source: Object2): void {
  // 只提取需要的属性
  const { name, value, desc } = source;
  // 赋值给目标对象
  Object.assign(target, { name, value, desc });
}

原理说明

  • 从Object2实例中解构出Object1拥有的三个属性
  • 用Object.assign把这些属性值批量赋值给Object1实例,自动忽略其他属性

验证效果

调用函数后,object1的输出会和预期一致:

name: "test", value: 5, desc: "testDesc"

Object2中的time、frame属性以及方法都会被忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:15:09