TypeScript中遍历动态添加的对象属性无输出问题求助
解决for...in无法遍历Object.defineProperty添加的属性问题
问题出在Object.defineProperty的默认配置上——你当前添加属性时没有指定enumerable配置项,它的默认值是false,这意味着这些属性是不可枚举的,而for...in循环只会遍历对象的可枚举属性,所以自然输出为空。
两种解决方法:
1. 显式设置enumerable: true
在调用Object.defineProperty时,把enumerable设为true,让属性变成可枚举状态:
export interface IFilaActividad { [key: string]: any } var filaActividad: IFilaActividad = {} this.columnsToDisplay.forEach(c => { Object.defineProperty(filaActividad, c, { enumerable: true, // 关键配置,开启可枚举 value: undefined // 可根据需求设置属性默认值,不写则为undefined }); });
2. 直接用对象赋值添加属性(更简洁)
如果不需要Object.defineProperty的高级特性(比如配置getter/setter、不可修改等),直接通过对象索引赋值的方式添加属性即可,这种方式添加的属性默认就是可枚举的:
export interface IFilaActividad { [key: string]: any } var filaActividad: IFilaActividad = {} this.columnsToDisplay.forEach(c => { filaActividad[c] = undefined; });
额外提示
如果不想遍历原型链上的属性,可以在for...in里搭配Object.hasOwn()过滤:
for (const key in filaActividad) { if (Object.hasOwn(filaActividad, key)) { console.log(key); // 只输出对象自身的可枚举属性 } }
内容的提问来源于stack exchange,提问作者kintela
相关产品推荐
相关产品推荐

