Flow 注解导出
升级到 类型优先 模式可能需要在模块边界添加大量类型注解。为了帮助升级大型代码库,我们提供了一个代码重构命令,其目标是填充这些缺失的注解。此命令包含在 Flow 二进制文件中,版本 >= 0.125
。
注意:从 0.134 版本开始,类型优先是默认模式。如果您使用的是
>=0.134
版本,请确保在运行此代码重构时在您的 .flowconfig 中设置types_first=false
。
此命令使用 Flow 推断的类型来填充原本会引发 签名验证 失败的位置。它将包含必要的类型导入语句,只要相应的类型从其定义模块导出。
它旨在用于一次处理多个文件,而不是一次处理一个文件。因此,它不会连接到现有的 Flow 服务器,而是启动自己的检查过程。
与这种机械化方法一样,它也有一些注意事项
- 它无法填充所有必需的类型注解。某些情况需要手动操作。
- 插入的注解可能会导致新的 Flow 错误,因为无法始终将推断的类型与可以作为注解编写的类型匹配。
- 文件格式可能会受到影响。如果使用代码格式化程序(例如 prettier),建议您在代码重构运行完毕后运行它。
如何应用代码重构
调用此命令的典型方法是
flow codemod annotate-exports \
--write \
--repeat \
--log-level info \
/path/to/folder \
2> out.log
此命令将转换 /path/to/folder
下的文件。它不需要是根目录(包含 .flowconfig
的目录)。
它使用以下标志
--write
将就地更新/path/to/folder
下需要注解的文件。如果没有此标志,生成的将文件会在命令行上打印。--repeat
确保转换将被应用,直到不再有文件更改。此模式在这里是必要的,因为代码重构添加的每个新类型都可能需要新的位置进行注解。--log-level info
在标准错误流中输出有用的调试信息。此选项可能会导致输出冗长,因此我们将错误输出重定向到日志文件out.log
。
另一种提供输入的便捷方法是传递标志
--input-file file.txt
其中 file.txt
包含要转换的特定文件列表。
代码重构输出
在每次代码重构迭代之后,将在 CLI 上打印一个摘要。此摘要包含有关添加的注解数量以及跳过的位置数量的统计信息。它还打印遇到各种错误类型的计数。这些可以与日志中打印的错误匹配。
一个常见的错误情况是,在文件 a.js
中定义但未导出的类型 A
在文件 b.js
中被推断出来。代码重构将跳过添加此注解并在日志中报告错误。要解决此情况,您可以在 a.js
中导出 A
。请注意,您无需在 b.js
中手动导入 A
。代码重构将自动执行此操作。