Angular 角度-未捕获类型错误:无法读取属性';总体问题';未定义的

Angular 角度-未捕获类型错误:无法读取属性';总体问题';未定义的,angular,typeerror,Angular,Typeerror,我试图将测验属性分组为quizMetadata对象,然后使用对象,但出现以下错误:“错误错误:未捕获(承诺中):类型错误:无法读取未定义的属性“totalQuestions” 导出类ResultComponent在NIT上实现{ quizData:quick=quick\u数据; quizMetadata:{ 总体问题:数量; CorrectAnswerScont$:可观察到; 百分比:数字; 完成时间:数字; }; ... 构造函数(专用quizService:quizService){ th

我试图将测验属性分组为quizMetadata对象,然后使用对象,但出现以下错误:“错误错误:未捕获(承诺中):类型错误:无法读取未定义的属性“totalQuestions”

导出类ResultComponent在NIT上实现{
quizData:quick=quick\u数据;
quizMetadata:{
总体问题:数量;
CorrectAnswerScont$:可观察到;
百分比:数字;
完成时间:数字;
};
...
构造函数(专用quizService:quizService){
this.quizMetadata.totalQuestions=this.quizService.numberOfQuestions();
...
}

您可能想订阅您的服务

export class SomeComponent {

  currentValue: string;

  constructor(private someService: SomeService) {
    someService.getSomeObservable().subscribe(result => {
      this.currentValue = result ;
    });
  }

您的quizMetadata未正确受初始值的影响。而不是:

quizMetadata:{
总体问题:数量;
CorrectAnswerScont$:可观察到;
百分比:数字;
完成时间:数字;
};
这样做:

quizMetadata={
总体问题:数量;
CorrectAnswerScont$:可观察到;
百分比:数字;
完成时间:数字;
};

将所有属性设置为可选,并使用空对象初始化

quizMetadata:{
总体问题:数量;
CorrectAnswerScont$:可观察到;
百分比:数字;
完成时间:数字;
};

quizMetadata:{
总数问题:数字;
correctAnswersCount$?:可观察到;
百分比?:数字;
完成时间?:编号;
} = {};

您需要使用一些值初始化
quizMetadata
。目前,它还没有定义。我的意思是使用=而不是:初始化quizMetadata时,我尝试了这个方法,但在类型下面出现了红色的扭曲线条。由于quizMetadata没有键入,这不是问题(可能您在编辑器中激活了严格的类型检查)。否则,您应该键入quizMetadata并像quizMetadata那样执行:={您的初始值},就像您对QuizDataOK所做的一样。谢谢。尝试使用:quizMetadata:quizMetadata={totalQuestions?:number,correctAnswersCount$?:Observable,percentage?:number,completionTime?:number}={};但我得到了字段的红色曲线,错误TS1109:应为表达式。对于具有ObservalEquizMetaData的行:QuizMetadata={totalQuestions?:number,CorrectAnswerScont$?:Observable,percentage?:number,completionTime?:number}={};初始化错误它得到两次初始化检查是否正确初始化:
javascript quizMetadata:{totalQuestions?:number;CorrectAnswerScont$?:Observable;percentage?:number;completionTime?:number;}={}
export class SomeComponent {

  currentValue: string;

  constructor(private someService: SomeService) {
    someService.getSomeObservable().subscribe(result => {
      this.currentValue = result ;
    });
  }