繁体   English   中英

无法将可选属性设置为 null

[英]cannot set optional property to null

我有一个 model class,我在其中定义了一个像这样的可选属性:

 export class Workflow { constructor( public id: number, public started: Date, public documentId: number, public document: Document, public status: WorkflowStatus, public workflowEvents: WorkflowEvent[], public startingUserId: number, public statusValue?: string, ) {} }

我也有一个 pipe ,它将状态属性转换为字符串:

 import { Pipe, PipeTransform } from '@angular/core'; import { WorkflowStatus } from '../models/workflowstatus.enum'; @Pipe({ name: "status" }) export class WorkflowStatusPipe implements PipeTransform { public transform(value: WorkflowStatus): string { switch (value) { case WorkflowStatus.ForwardedToApprover: return "TOV"; case WorkflowStatus.ReadedByApprover: return "OLV"; case WorkflowStatus.Commented: return "MEGJ"; case WorkflowStatus.Approved: return "JÓV"; case WorkflowStatus.ForwardedToManager: return "MAN"; } } }

然后我有文档对象。 对于每个文档,我们可以有一个工作流程。 我通过 api 获得文件:

 this.documentRepo.getDocuments().subscribe(documents => { documents.forEach(function (document) { document.workflow.statusValue = new WorkflowStatusPipe().transform(document.workflow?.status); }); this.documents = documents; });

如您所见,如果有工作流,我正在尝试将状态值转换为字符串。 但我在控制台中收到此错误:'无法设置属性'statusValue' of null'。

我真的不明白,为什么,因为我将statusValue属性设置为可选属性。

我应该如何修改代码?

编辑:

这是来自 getDocuments 的结果的文档 object:

在此处输入图像描述

另一个奇怪的事情:如果我只是像这样简单地将一个无意义的字符串分配给 statusValue,我会得到同样的错误:

 this.documentRepo.getDocuments().subscribe(documents => { documents.forEach(function (document) { document.workflow.statusValue = "x";//new WorkflowStatusPipe().transform(document.workflow?.status); }); this.documents = documents; });

我认为您只需要处理属性document.workflow不存在或者是 null 的情况。 为没有工作流程的文档设置默认工作流程值,或者只是跳过没有工作流程的文档中的处理,例如

this.documentRepo.getDocuments().subscribe(documents => {
  documents.forEach(function (document) {
    if (document.workflow) {
      document.workflow['statusValue'] = new WorkflowStatusPipe().transform(document.workflow?.status);
    }
  });
  this.documents = documents;
});

另请注意,如果document.workflow.status不是您的 switch 语句中考虑的值,您将得到未定义的结果。 根据您对那里的期望,您可能希望添加默认情况以返回不同的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM