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

Angular 11中接口类型数组赋值时出现TypeError: Cannot set properties of undefined错误的问题咨询

解决Angular中"Cannot set properties of undefined"错误

我来帮你搞定这个报错问题!

错误原因分析

你已经把ProvinceAllStudent初始化为空数组[],但在CalculateProvinceStudents方法的循环里,直接通过this.ProvinceAllStudent[j]去访问数组元素——这时候数组的第j位根本还没有对应的Test对象,是undefined,自然没法给它的id和name属性赋值,所以才抛出了TypeError: Cannot set properties of undefined这个错误。

修复方案

这里有几种简单的修复方式,选你觉得顺手的就行:

方案1:创建对象后push到数组

这是最直观的写法,每次循环创建一个符合Test接口的对象,再添加到数组里:

CalculateProvinceStudents() {
  for(let j=0;j<5;j++) {
    const studentItem: Test = {
      id: j,
      name: 'A'
    };
    this.ProvinceAllStudent.push(studentItem);
  }
}

方案2:先初始化索引位置的对象

如果坚持要通过索引赋值,可以先给对应位置创建一个空对象(用类型断言符合Test接口),再设置属性:

CalculateProvinceStudents() {
  for(let j=0;j<5;j++) {
    this.ProvinceAllStudent[j] = {} as Test;
    this.ProvinceAllStudent[j].id = j;
    this.ProvinceAllStudent[j].name = 'A';
  }
}

方案3:用Array.from简化生成数组

想要更简洁的写法,可以用Array.from直接生成符合要求的数组:

CalculateProvinceStudents() {
  this.ProvinceAllStudent = Array.from({length:5}, (_, index) => ({
    id: index,
    name: 'A'
  } as Test));
}

不管用哪种方式,核心都是要保证数组的每个位置先存在一个Test类型的对象,再去设置它的属性,这样就不会出现undefined的问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:57:37