我发现很难使用Flow。我知道Array.find
可以返回或不确定。
因此,请阅读以下内容:github: Array.find on Array<{...}> raises
我这样做了,并在类型中添加了void
。但是现在我得到了错误:
无法获取
stageMsg.msg
,因为属性msg
缺少null或未定义(请参见第92行)。
检查代码以查看错误的具体位置。
我知道为什么会给我错误,没有msg
未定义。我不知道该如何解决这个问题。
代码如下:
type StageMsg = {
stage: number,
msg?: string
};
let stageMsg: void | StageMsg = this.stages.find(
(obj: StageMsg) => obj.stage === this.state.stage
);
msg = (
<Msg text={this.state.msg !== "" ? this.state.msg : stageMsg.msg} /> //<---- [Error here].
);
感谢高级人才:D
答案 0 :(得分:3)
在访问属性之前,您只需要检查stageMsg
是否存在。
因此,您可以将您的任务包装到msg
中的if (stageMsg) { ... }
,或使用stageMsg && stageMsg.msg
之类的内联表达式。
另外请注意,您可以使用maybe语法,而不要使用void
的并集,例如let stageMsg: ?StageMsg