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

