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

Angular 2嵌套对象subQuestions赋值报错:subQuestionId未定义

解决Angular中嵌套对象属性赋值报错的问题

兄弟,这个TypeError: Cannot set property 'subQuestionId' of undefined报错我太熟了——本质就是你在给subQuestionId赋值的时候,它的父对象subQuestions还没被初始化,处于undefined状态,自然没法给它的属性赋值啦。

结合你给出的AnswerEntryDataModel类定义,我给你两个最直接的解决方案:

方案1:给数据模型的嵌套对象设置默认初始化值

在你的类定义里,直接给subQuestions属性设置一个默认的空对象(或者带默认属性值的对象),这样创建类实例的时候,subQuestions就不会是undefined了:

export class AnswerEntryDataModel{ 
  consultationId:string = '';
  responseId:string = '';
  questionId:string = '';
  answers:string[] = []; // 数组也建议初始化,避免后续赋值踩同样的坑
  isPreDefineAnswer:boolean = false;
  // 给subQuestions初始化一个默认对象
  subQuestions:{ 
    subQuestionId:string; 
    isPreDefineSubAnswer:boolean;
    // 你的其他子属性...
  } = { 
    subQuestionId: '',
    isPreDefineSubAnswer: false
    // 其他子属性也可以设置默认值
  };
}

之后你创建实例并赋值就不会报错了:

const answerEntry = new AnswerEntryDataModel();
answerEntry.subQuestions.subQuestionId = 'your-sub-question-id'; // 完美运行

方案2:手动初始化嵌套对象后再赋值

如果不想修改类定义,那在给subQuestionId赋值前,先手动给subQuestions创建一个对象:

const answerEntry = new AnswerEntryDataModel();
// 先初始化subQuestions对象
answerEntry.subQuestions = { 
  subQuestionId: '',
  isPreDefineSubAnswer: false
};
// 再给subQuestionId赋值
answerEntry.subQuestions.subQuestionId = 'your-sub-question-id';

补充说明

TypeScript中,类的属性如果没有显式初始化,默认值是undefined。对于嵌套对象来说,必须确保父对象已经被实例化(不是undefined),才能访问它的子属性,否则就会抛出你遇到的这个错误。

内容的提问来源于stack exchange,提问作者K.Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:37:14