我发现很难使用Flow。我知道Array.find
可以返回或未定义。
因此,通过阅读以下内容:github: Array.find on Array<{...}> raises
我做到了,并在类型中添加了void
。但是现在我得到了错误:
检查代码以查看错误的具体位置。
我知道为什么会给我错误,未定义中没有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].
);
最佳答案
您只需要在访问stageMsg
之前检查其属性即可。
因此,您可以将自己的工作分配包装在msg
中的if (stageMsg) { ... }
中,或者使用内联表达式,例如stageMsg && stageMsg.msg
。
另请注意,您可以使用maybe语法,而不是与void
合并,例如let stageMsg: ?StageMsg