0

我在使用 HOC 时遇到了 Flow 错误,它只是注入了一个 prop,使用以下定义:

declare function injectFoo<P: {}>(
  Component: React$ComponentType<{ foo: number } & P>
): React$ComponentType<P>;

但是,当我更改为此版本时,Flow 不再抱怨:

declare function injectFoo<P: {}>(
  Component: React$ComponentType<{ foo: number, ...P }>
): React$ComponentType<P>;

我认为它们是等价的,但我猜不是。有人可以解释有什么区别或指出一些文档的方向吗?

流量版本:0.56

PS:这两种方法的真实示例可以在流类型存储库中withRouter (react-router) 和injectIntl​​ (react-intl) 的流定义中找到。

编辑:我创建了一个干净的 create-react-app 项目来显示这个问题。该项目有 2 次提交,第一次有 Flow 错误,在第二次提交中通过将 injectIntl​​ 的定义从交集更改为扩展来修复。https://github.com/hyperivo/sandbox-stackoverflow-46591826

编辑 2:流类型项目中的问题:https ://github.com/flowtype/flow-typed/issues/1314

谢谢

4

1 回答 1

0

这真的很奇怪,我认为这是一个错误flow-typed
它本身也可能是一个错误flow,但由于它只在flow.org/try沙箱中工作,我的第一个想法是它在flow-typed?
或者它可能是flow.org/try沙箱中的错误?

我的建议是您在flow-typedrepo 中报告一个问题(也可以在此处发布链接以获取更多文档),然后flow团队会确定

上一个答案:

看了你的截图后,我猜你使用的是 i18n 包?(react-intl?)所以我认为你没有为 i18n 提供正确的道具到组件中。

原答案:

两个版本基本相同,都可以使用flow v0.56.0,就像您在flow.org/try上看到的那样

于 2017-10-05T18:05:05.253 回答