Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 角度误差TS2532:对象可能为';未定义';_Java_Angular_Spring_Jhipster - Fatal编程技术网

Java 角度误差TS2532:对象可能为';未定义';

Java 角度误差TS2532:对象可能为';未定义';,java,angular,spring,jhipster,Java,Angular,Spring,Jhipster,我一直无法找到为什么我在一个角度项目上会出现这个错误 计划包含任务和任务数组。每个任务都包含一个名为MetaTime的实体。MetaTime有一个TaskStart字段 plan.usergen.model.ts import { Moment } from 'moment'; import {ITaskUsergen} from "app/shared/model/task.usergen.model"; export interface IPlan { id?: n

我一直无法找到为什么我在一个角度项目上会出现这个错误

计划包含任务和任务数组。每个任务都包含一个名为MetaTime的实体。MetaTime有一个TaskStart字段

plan.usergen.model.ts

import { Moment } from 'moment';
import {ITaskUsergen} from "app/shared/model/task.usergen.model";

export interface IPlan {
  id?: number;
  name?: string;
  startDate?: Moment;
  tasks?: ITaskUsergen[];
}

export class Plan implements IPlan {
  constructor(
    public id?: number,
    public name?: string,
    public startDate?: Moment,
    public tasks?: ITaskUsergen[],
  ) {}
}
import {ITask, Task} from "app/shared/model/task.model";
import {MetaTime} from "app/shared/model/meta-time.model";

export interface ITaskUsergen extends ITask {
  metaTime?: MetaTime;
}

export class TaskUserGen extends Task implements ITaskUsergen {
  constructor(public metaTime?: MetaTime) {
    super();
  }
}
import { Moment } from 'moment';

export interface IMetaTime {
  id?: number;
  taskStart?: Moment;
  taskDuration?: number;
  taskInterval?: number;
  taskRepeat?: number;
}

export class MetaTime implements IMetaTime {
  constructor(
    public id?: number,
    public taskStart?: Moment,
    public taskDuration?: number,
    public taskInterval?: number,
    public taskRepeat?: number
  ) {}
}
task.usergen.model.ts

import { Moment } from 'moment';
import {ITaskUsergen} from "app/shared/model/task.usergen.model";

export interface IPlan {
  id?: number;
  name?: string;
  startDate?: Moment;
  tasks?: ITaskUsergen[];
}

export class Plan implements IPlan {
  constructor(
    public id?: number,
    public name?: string,
    public startDate?: Moment,
    public tasks?: ITaskUsergen[],
  ) {}
}
import {ITask, Task} from "app/shared/model/task.model";
import {MetaTime} from "app/shared/model/meta-time.model";

export interface ITaskUsergen extends ITask {
  metaTime?: MetaTime;
}

export class TaskUserGen extends Task implements ITaskUsergen {
  constructor(public metaTime?: MetaTime) {
    super();
  }
}
import { Moment } from 'moment';

export interface IMetaTime {
  id?: number;
  taskStart?: Moment;
  taskDuration?: number;
  taskInterval?: number;
  taskRepeat?: number;
}

export class MetaTime implements IMetaTime {
  constructor(
    public id?: number,
    public taskStart?: Moment,
    public taskDuration?: number,
    public taskInterval?: number,
    public taskRepeat?: number
  ) {}
}
元时间.model.ts

import { Moment } from 'moment';
import {ITaskUsergen} from "app/shared/model/task.usergen.model";

export interface IPlan {
  id?: number;
  name?: string;
  startDate?: Moment;
  tasks?: ITaskUsergen[];
}

export class Plan implements IPlan {
  constructor(
    public id?: number,
    public name?: string,
    public startDate?: Moment,
    public tasks?: ITaskUsergen[],
  ) {}
}
import {ITask, Task} from "app/shared/model/task.model";
import {MetaTime} from "app/shared/model/meta-time.model";

export interface ITaskUsergen extends ITask {
  metaTime?: MetaTime;
}

export class TaskUserGen extends Task implements ITaskUsergen {
  constructor(public metaTime?: MetaTime) {
    super();
  }
}
import { Moment } from 'moment';

export interface IMetaTime {
  id?: number;
  taskStart?: Moment;
  taskDuration?: number;
  taskInterval?: number;
  taskRepeat?: number;
}

export class MetaTime implements IMetaTime {
  constructor(
    public id?: number,
    public taskStart?: Moment,
    public taskDuration?: number,
    public taskInterval?: number,
    public taskRepeat?: number
  ) {}
}

完全错误是:

ERROR in src/main/webapp/app/entities/plan-usergen/plan-detail.component.html:47:46 - error TS2532: Object is possibly 'undefined'.
47   <td>{{ task.metaTime.taskStart }}</td>
                                            ~~~~~~~~
src/main/webapp/app/entities/plan-usergen/plan-detail.component.ts:7:16
7   templateUrl: './plan-detail.component.html',
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Error occurs in the template of component PlanDetailComponent.
src/main/webapp/app/entities/plan usergen/plan detail.component.html:47:46中出现错误-错误TS2532:对象可能“未定义”。 47{{task.metaTime.taskStart} ~~~~~~~~ src/main/webapp/app/entities/plan usergen/plan detail.component.ts:7:16 7 templateUrl:“./plan detail.component.html”, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 组件PlanDetailComponent的模板中发生错误。
由于您已将导致
taskStart
的整个变量链设置为可选,从技术上讲,其中任何一个变量都可能未定义,这将导致无法访问
taskStart
变量。您应该以空安全的方式访问它,或者重新考虑变量是否需要是可选的。

因为您已经将导致
taskStart
的整个变量链设置为可选的,从技术上讲,它们中的任何一个都可能是未定义的,这将导致无法访问
taskStart
变量。您应该以空安全的方式访问它,或者重新考虑变量是否需要是可选的。

这可能是因为您正在编译AOT(提前),并且
元时间
可以为空(在
元时间之后的问号?

编译器给出这个错误是因为我认为它非常严格(我自己不是一个角度专家),但是你应该做一个空检查来防止可能出现的空情况

你至少可以用这个来修复它,问题是这是否是你期望发生的行为:

<td>{{ task.metaTime?.taskStart }}</td>
{{task.metaTime?.taskStart}

归根结底,这一切都是为了让代码的行为符合您的预期。

这可能是因为您正在编译AOT(提前),并且
元时间
可以为空(元时间之后的问号?)

编译器给出这个错误是因为我认为它非常严格(我自己不是一个角度专家),但是你应该做一个空检查来防止可能出现的空情况

你至少可以用这个来修复它,问题是这是否是你期望发生的行为:

<td>{{ task.metaTime?.taskStart }}</td>
{{task.metaTime?.taskStart}

归根结底,这一切都是为了让代码的行为符合您的预期。

谢谢。您有空安全访问的示例吗?你的意思是在组件中?所以一个基本的解决方案是使用一个函数,该函数将接受任务,并在检查前一个变量是否未定义后尝试访问开始时间。例如:
getTaskStart(task){if(task&&task.metaTime){return task.metaTime.taskStart;}}
谢谢。您有空安全访问的示例吗?你的意思是在组件中?所以一个基本的解决方案是使用一个函数,该函数将接受任务,并在检查前一个变量是否未定义后尝试访问开始时间。例如:
getTaskStart(task){if(task&&task.metaTime){return task.metaTime.taskStart;}}
这是“严格的空检查”,要关闭它,请尝试在tsconfig.js文件“strictNullChecks”的“compilerOptions”下添加此选项:true将其设置为true或false以关闭?您不应禁用此功能,而应正确处理可为null的对象。由于此错误,您提前捕获了错误。这是“严格的空检查”,若要将其关闭,请尝试在tsconfig.js文件“strictNullChecks”的“compilerOptions”下添加此选项:trueset将其设置为true或false以关闭?您不应禁用此选项,而应正确处理可为空的对象。由于这个错误,您可以提前捕获bug。