React Navigation 和流式

React Navigation and flow-typed

我刚开始在 React Native 应用程序(例如 React Navigation)中为我的流行库使用流类型定义,但我发现很难找到有关类型以及如何使用它们的文档。我的 IDE 中仍然出现错误,我觉得 Flow 更浪费我的时间,而不是为我的开发人员体验增加价值,因为我必须一直查找类型(有时甚至找不到答案)。有什么建议吗?

使用许多 npm 模块的复杂 Web 应用程序很少会自始至终都是强类型的。 JS 中强类型的目标主要是尽可能多地使用可行甚至合理的类型。没有 libdefs 的模块将以 any 的形式出现,那是 好吧。 显然,如果你引入的所有东西都有完整的类型,那就太好了,但只是给出了进展的方式这几乎是不可能的。除此之外,升级流程的简单行为通常会在您的代码库中引入更多被捕获的错误,您最终不得不接受输入是一个渐进的过程,它不应该是一个真正的阻塞过程。

既然这样,你似乎有很多不同的 sub-questions:

I've to lookup for the types all the time

不完全确定你的意思,但你可能会说很难找到你正在使用的包的类型。确保您熟悉 flow-typed CLI 工具的工作原理 (npx flow-typed),它将帮助您搜索和安装兼容的 libdef。如果您在 flow-typed 中找不到模块的任何内容,请查看源 github 存储库并确保流类型未随模块本身一起提供。如果您遇到带有 .d.ts (TypeScript) 文件的包,请尝试将其转换为带有 flowgen 的 libdef。如果没有任何成果,您可能应该放弃类型并继续。

在这种情况下,我实际上会启动自己的 libdef (npx flow-typed create-stub <package name>) 并在进行时填写一些基本类型。您可以从非常简单的开始,我目前有一个用于 react-select 的 libdef,它只检查组件的一个属性,即 options 属性(我不记得为什么我有这个,但是 :P)。同样,渐进式打字是目标。与检查 none.

相比,检查一个道具实际上非常好

I find it quite hard to find the documentation on types and how to use them

flow-typed 中通常没有 libdefs 的真正文档,除非它是由包作者在某处编写的。我通常自己阅读 libdefs,但如果您发现用法令人困惑,我建议您查看 tests associated with the libdef. You can also dig through any relevant issues or PRs 以查找用法示例。

sometimes don't even find an answer

添加一个 $FlowFixMe,如果它让你的速度太慢,稍后再回来。随着您越来越习惯于一般的流程和强类型,所有这些事情都会变得更易于管理,并且流程和 libdefs 都在不断改进。

I'm still getting errors in my IDE

如果您无法修复它们,请添加 $FlowFixMe 并稍后回来。 Flow 实际上在其源代码中包含一个工具,该工具具有为每个错误添加 $FlowFixMe 的实用程序,但由于它当前未交付给 npm,您必须克隆源代码才能使用它。