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

TypeScript中如何动态将对象值映射到this且不新增属性

解决TypeScript中对象属性映射到类实例且不添加额外属性的问题

要实现仅将源对象中与类实例自有属性匹配的字段赋值到this上,核心思路是只遍历类实例自身的属性,再从源对象中提取对应值赋值,避免引入源对象的额外属性。

修正后的动态遍历实现代码

const bigTodo = {
  name: "aaaaaaa",
  unwantedProperty: "Nooooooo"
}

export class SmallTodo {
    name: string;

    constructor(bigTodo: any){
        // 获取当前类实例的所有自有属性名
        const ownProps = Object.getOwnPropertyNames(this);
        // 遍历自有属性,仅复制匹配的字段
        ownProps.forEach(prop => {
            if (bigTodo.hasOwnProperty(prop)) {
                this[prop as keyof SmallTodo] = bigTodo[prop];
            }
        });
    }
}

// 测试验证
const todo = new SmallTodo(bigTodo);
console.log(todo); // 输出: SmallTodo { name: 'aaaaaaa' }

关键细节说明

  • Object.getOwnPropertyNames(this):获取SmallTodo实例自身的所有属性(此处仅为name),确保只处理类中声明的字段。
  • 类型断言prop as keyof SmallTodo:解决TypeScript类型检查报错,明确prop属于SmallTodo的属性键范围。
  • 判断bigTodo.hasOwnProperty(prop):仅当源对象包含对应属性时才赋值,避免给实例添加未声明的属性。

属性较少时的简洁写法(类型更安全)

如果类的属性数量不多,直接用解构赋值手动指定字段,类型检查更严格:

export class SmallTodo {
    name: string;

    constructor(bigTodo: any){
        const { name } = bigTodo;
        this.name = name;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:37:13