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

Angular项目中声明数组后仍报‘push of undefined’错误求助

问题解析与修复方案

嘿,这个错误我太熟悉啦!你碰到的Cannot read property push of undefined问题,核心原因非常明确——你只给contactWithInitials声明了数组类型,但没有初始化它为一个空数组,此时它的值还是undefined,自然没法调用push方法~

问题出在哪?

看你这段代码:

let contactWithInitials: any [];

这行代码只是告诉TypeScript“这个变量应该是any类型的数组”,但并没有给它分配实际的数组实例,所以它的初始值是undefined,当你尝试调用contactWithInitials.push(...)时,就会触发这个错误。

怎么修复?

只需要在声明变量的时候初始化它为空数组就行:

let contactWithInitials: any [] = [];

额外优化建议(可选)

既然用了TypeScript,尽量别用any类型,建议定义一个接口来规范数组元素的结构,让代码更健壮:

// 先定义接口,明确元素的类型
interface ContactWithInitial {
  userInitials: string;
  first_name?: string;
  last_name?: string;
  // 加上你需要的其他联系人属性
}

// 用接口声明数组类型并初始化
let contactWithInitials: ContactWithInitial[] = [];

this.contacts.forEach(eachObj => {
  let initialHold = ''; // 先初始化为空字符串,避免undefined拼接问题
  if (eachObj.first_name) {
    initialHold = eachObj.first_name.charAt(0);
  }
  if (eachObj.last_name) {
    initialHold += eachObj.last_name.charAt(0);
  }
  // 可选:如果不需要空初始值的条目,可以加个判断
  if (initialHold) {
    contactWithInitials.push({ 
      userInitials: initialHold,
      ...eachObj // 把原联系人的属性也拷贝进去
    });
  }
});

这样不仅解决了错误,还让代码的类型更清晰,后续维护也更方便~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:58:06