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