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
相关产品推荐
相关产品推荐

