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

Angular/TypeScript中push报错:Cannot read property 'push' of undefined

解决TypeError: Cannot read property 'push' of undefined问题

这个错误我之前也碰到过,本质就是你要往里面push元素的那个数组根本没被正确初始化——说白了就是你的Equipa实例里的funcionarios属性是undefined,自然没法调用push方法。结合你给出的Funcionarios类代码,我大概率能猜到问题出在Equipa类的定义上,咱们一步步来排查解决:

1. 先确认你的Equipa类是不是没初始化数组属性

你提到已经初始化了所有变量,但很可能是Equipa类里的funcionarios数组只做了类型声明,却没给它初始化为空数组。比如你可能写了这样的Equipa类:

export class Equipa {
  id: Number;
  nomeEquipa: string;
  funcionarios: Funcionarios[]; // 只声明了类型,没有初始化!
  constructor(nomeEquipa: string) {
    this.nomeEquipa = nomeEquipa;
  }
}

这种情况下,当你创建Equipa实例后,funcionarios的默认值是undefined,调用push自然会报错。

2. 给Equipa类的数组属性初始化

解决方法很简单,给funcionarios属性初始化为空数组,有两种常用方式:

方式一:在属性声明时直接初始化

export class Equipa {
  id: Number;
  nomeEquipa: string;
  funcionarios: Funcionarios[] = []; // 直接初始化为空数组
  constructor(nomeEquipa: string) {
    this.nomeEquipa = nomeEquipa;
  }
}

方式二:在构造函数内部初始化

export class Equipa {
  id: Number;
  nomeEquipa: string;
  funcionarios: Funcionarios[];
  constructor(nomeEquipa: string) {
    this.nomeEquipa = nomeEquipa;
    this.funcionarios = []; // 构造函数里初始化数组
  }
}

3. 额外排查:确认Equipa实例是否正确创建

还要检查你创建Equipa实例的代码,是不是忘了用new关键字?比如错误的写法:

let minhaEquipa; // 只是声明了变量,没创建实例
minhaEquipa.funcionarios.push(new Funcionarios(1, "Pedro"));

正确的写法应该是:

let minhaEquipa = new Equipa("Equipa de Desenvolvimento");
minhaEquipa.funcionarios.push(new Funcionarios(1, "Pedro"));

4. 最后排查:有没有不小心覆盖了数组属性

如果上面的都没问题,那就要检查是不是在其他代码里不小心把funcionarios赋值成了undefined,比如:

minhaEquipa.funcionarios = undefined; // 误操作覆盖成undefined
minhaEquipa.funcionarios.push(...); // 这时候肯定会报错

只要把Equipa类里的funcionarios数组正确初始化为空数组,这个问题基本就能解决啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:16:59