流类型属性“ msg”缺少null或未定义

时间:2018-11-14 14:11:36

标签: javascript react-native flowtype

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

1 个答案:

答案 0 :(得分:3)

在访问属性之前,您只需要检查stageMsg是否存在。
因此,您可以将您的任务包装到msg中的if (stageMsg) { ... },或使用stageMsg && stageMsg.msg之类的内联表达式。
另外请注意,您可以使用maybe语法,而不要使用void的并集,例如let stageMsg: ?StageMsg