Java 角度误差TS2532:对象可能为';未定义';
我一直无法找到为什么我在一个角度项目上会出现这个错误 计划包含任务和任务数组。每个任务都包含一个名为MetaTime的实体。MetaTime有一个TaskStart字段 plan.usergen.model.tsJava 角度误差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
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。