Javascript Flow type错误地认为我在向渲染方法中的组件传递道具

Javascript Flow type错误地认为我在向渲染方法中的组件传递道具,javascript,reactjs,flowtype,Javascript,Reactjs,Flowtype,考虑以下几点: render(): ?React.Element<*> { if (this.state.error) { if (redirect) return <Redirect to={redirect} />; return <Page404 />; } ... } Flow给了我一个错误: 属性“to” 在React元素“Page404”的道具中找不到属性 为什么flow认为我正在将Page404 a传递给prop?如

考虑以下几点:

render(): ?React.Element<*> {
  if (this.state.error) {
    if (redirect) return <Redirect to={redirect} />;
    return <Page404 />;
  }
  ...
}
Flow给了我一个错误:

属性“to” 在React元素“Page404”的道具中找不到属性

为什么flow认为我正在将Page404 a传递给prop?如何更正此问题?

既然您正在返回?React.Element,流必须用满足所有可能返回值的某些类型参数替换*。在本例中,其中一个类型参数是Props——因此它必须找到一个可以放在那里的类型,该类型与Page404和Redirect都匹配。因为他们没有匹配的道具,Flow无法做到这一点


简单的解决方案是将返回类型更改为?React.Element。由于调用者很少关心他们拥有的特定元素,实际上只需要任何React元素,因此在本例中使用any不会失去任何安全性。

@AndrewLi,是的,刚刚完成更新