我发现很难使用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

10-06 10:58