[英]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.