【问题标题】:Flow: with existential type deprecated, how to type a React element?流程:不推荐使用存在类型,如何键入 React 元素?
【发布时间】:2018-11-25 18:49:43
【问题描述】:

背景:在 v.0.72.0 中,Flow deprecated * 类型(或者,他们称之为 in the docs,存在类型)。

问题:我们现在如何描述 React 元素的类型(任何元素;它可以是由 React 组件或无状态组件(简单函数)渲染出来的元素,或者当我们在 JSX 中编写 html 标签时会呈现什么)?

试用流程中的示例:

Example 1 — 键入为 Node。这行得通,但是 Node 类型太宽泛了,除了 React 元素之外,还包括字符串、数字、布尔值等。我想缩小类型。

Example 2 — 键入为 Element<*>。这也有效,但正如上面所指出的,* 类型现在即将淘汰。

Example 3 — 键入为 Element<typeof Component>,根据 documentation。这不起作用。有没有合适的方法让它工作?

【问题讨论】:

  • 您对Element<typeof Component> 的使用是错误的。它应该与代码中的“真实”组件一起使用,例如,如果 Foo extends Component 或 Foo 是无状态功能组件,则可以编写 Element<typeof Foo>
  • 是的,我认为这是错误的,因为文档中的所有示例都使用了特定的组件,但我不知道如何使它足够通用,以便它可以与任何组件一起使用。

标签: reactjs flowtype


【解决方案1】:

看来你can使用泛型

【讨论】:

  • 非常酷!但是我意识到我在 try Flow 中的示例与我的实际代码有点不同,它使用类组件而不是功能组件,我不完全确定如何将您的示例转换为类组件。你觉得这样可以吗(它甚至不使用泛型):
  • 您的示例不适用于some cases
  • 我担心会变成这样 :-( 你能提出改进的建议吗?
  • 是的,很抱歉在单独的评论中提供this link
猜你喜欢
  • 1970-01-01
  • 2017-11-29
  • 2018-05-13
  • 1970-01-01
  • 2022-08-09
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
相关资源
最近更新 更多