Angular TypeScript创建对象数组时赋值错误求助
问题分析与解决
你的问题核心非常明确:你初始化的stats是一个空数组,直接访问this.stats[0]得到的是undefined,自然无法给它的name属性赋值。
先还原你的代码场景:
数组类型定义
stats: Array<{ name: string, age : number }> = [];
尝试的赋值操作
this.stats[0]['name'] = 'x';
报错信息
ERROR TypeError: Cannot set property 'name' of undefined
针对你需求的解决方式
既然你需要保留这种动态数组的形式,且要通过索引直接赋值,那必须先确保目标索引位置存在一个符合类型的对象,再进行属性赋值:
- 先初始化对应索引的对象,再赋值属性
// 先创建符合类型的对象(可以带默认值) this.stats[0] = { name: '', age: 0 }; // 再给name属性赋值 this.stats[0]['name'] = 'x';
- 或者一步完成对象创建与赋值
this.stats[0] = { name: 'x', age: 20 };
如果你的业务场景中不确定目标索引是否已经存在对象,可以先做个判断:
// 检查索引0的位置是否有有效对象,没有则初始化 if (!this.stats[0]) { this.stats[0] = { name: '', age: 0 }; } this.stats[0]['name'] = 'x';
这样就能避免undefined的报错,同时满足你动态数组、直接索引赋值的需求。
内容的提问来源于stack exchange,提问作者Mehul L
相关产品推荐
相关产品推荐

