代码之家  ›  专栏  ›  技术社区  ›  Rip3rs

null或未定义中缺少Flowtype属性“msg”

  •  0
  • Rip3rs  · 技术社区  · 7 年前

    我发现很难使用Flow。我明白 Array.find 可以返回或未定义。

    github: Array.find on Array<{...}> raises

    我这样做了,并补充说 void 到类型。但是现在我得到了一个错误:

    无法获取 stageMsg.msg msg 在null或未定义中丢失(请参见第92行)。

    检查代码以查看错误的具体位置。

    我明白为什么它会给我错误,没有 未定义。我不知道怎么解决这个问题。

    代码如下:

    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].
    );
    
    1 回复  |  直到 6 年前
        1
  •  7
  •   robC    7 年前

    你只需要检查一下 stageMsg 在访问其上的属性之前存在。
    所以你可以把你的任务包起来 msg 在里面 if (stageMsg) { ... } stageMsg && stageMsg.msg .
    另外请注意,您可以使用 maybe 语法而不是与 void 例如 let stageMsg: ?StageMsg