我刚开始在React Native应用程序(例如React Navigation)中为流行的库使用流类型的定义,但是我发现很难找到有关类型以及如何使用它们的文档。我仍然在我的IDE中出错,我觉得Flow在浪费我的时间,而不是在我的开发人员经验上增加价值,因为我一直在寻找类型(有时甚至找不到答案)。有什么建议吗?
答案 0 :(得分:1)
使用许多npm模块的复杂Web应用程序很少会被强类型化。 JS中强类型化的目标主要是尽可能多地进行可行甚至合理的类型化。没有libdefs的模块将以any
的形式出现,这还可以。显然,如果您引入的所有内容都具有完整类型,那将是很好的选择,但是只要给出取得进展的方式即可实际上是不可能的。除此之外,简单的升级流程行为通常会在您的代码库中引入更多捕获的错误,并且您最终不得不接受键入是一个渐进的过程,它实际上并不是阻塞性过程。
现在那已经不合时宜了,您似乎有许多不同的子问题:
我必须一直在寻找类型
不能完全确定这是什么意思,但是您可能会说很难找到所用软件包的类型。确保您熟悉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)。同样,渐进式打字是目标。与不检查一个道具相比,检查一个道具实际上真的很不错。
我发现很难找到有关类型以及如何使用它们的文档
flow-typed
中通常没有真正的libdefs文档,除非它是由软件包作者在某处编写的。我通常会自己阅读libdefs,但是如果您发现用法混乱,建议您查看与libdef相关的tests。您还可以浏览任何relevant issues or PRs来查找用法示例。
有时甚至找不到答案
添加一个$FlowFixMe
,如果它使您的速度降低太多,请稍后再使用。随着您逐渐习惯于流和强类型,所有这些事情将变得更加易于管理,并且流和libdef都在不断改进。
我的IDE仍然出现错误
如果您无法修复它们,请添加$FlowFixMe
,然后再回来。 Flow实际上在其源代码中包含一个工具,该工具具有用于为每个错误添加$FlowFixMe
的实用程序,但是由于npm目前尚未提供该工具,因此您必须克隆源代码才能使用它。