首页 文章

Flowtype属性'msg'在null或undefined中缺失

提问于
浏览
0

我发现很难使用Flow . 我知道 Array.find 可以返回或未定义 .

所以通过阅读:github: Array.find on Array<> raises

我这样做了,并将 void 添加到了类型中 . 但是现在我收到了错误:

无法获取stageMsg.msg,因为null或undefined中缺少属性msg(参见第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 回答

  • 3

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

相关问题