使用
安装 Flow 后,您需要了解如何在最基本的层面上使用 Flow。对于大多数新的 Flow 项目,您将遵循以下一般模式
- 使用
flow init
初始化您的项目。 - 使用
flow
启动 Flow 后台进程。 - 使用
// @flow
确定 Flow 将监控哪些文件。 - 为您的项目 编写 Flow 代码。
- 检查您的代码是否有类型错误。
初始化您的项目
准备一个 Flow 项目只需要一个命令
flow init
在项目的顶层运行此命令,以创建一个名为 .flowconfig
的空文件。在最基本的层面上,.flowconfig
告诉 Flow 后台进程从哪里开始检查 Flow 代码是否有错误。
就是这样。您的项目现在已启用 Flow。
通常,您的项目会有一个空的
.flowconfig
文件。但是,您可以通过添加到.flowconfig
的可用选项,以多种方式 配置和自定义 Flow。
运行 Flow 后台进程
Flow 的核心优势在于它能够快速检查您的代码是否有错误。启用项目 Flow 后,您可以启动一个进程,让 Flow 可以增量式且快速地检查您的代码。
flow status
此命令首先启动一个后台进程,该进程将检查所有 Flow 文件 中的错误。后台进程会持续运行,监控代码更改,并增量式地检查这些更改是否有错误。
您也可以输入
flow
来实现与status
相同的效果,因为status
是flow
二进制文件的默认标志。
在任何给定时间,都只会有一个后台进程在运行,因此,如果您多次运行
flow status
,它将使用相同的进程。
要停止后台进程,请运行
flow stop
。
准备您的代码以供 Flow 使用
Flow 后台进程会监控所有 Flow 文件。但是,它如何知道哪些文件是 Flow 文件,因此应该进行检查?在 JavaScript 文件中将以下内容放在任何代码之前,就是进程用来回答这个问题的标志。
1// @flow
此标志采用普通 JavaScript 注释的形式,并用 @flow
进行注释。Flow 后台进程会收集所有带有此标志的文件,并使用所有这些文件中可用的类型信息来确保一致性和无错误的编程。
您也可以使用
/* @flow */
形式的标志。
对于项目中没有此标志的文件,Flow 后台进程会跳过并忽略代码(除非您调用
flow check --all
,这超出了基本使用的范围)。
编写 Flow 代码
现在,所有设置和初始化都已完成,您就可以编写实际的 Flow 代码了。对于您已使用 // @flow
标记的每个文件,您现在都可以使用 Flow 及其类型检查的全部功能。以下是一个示例 Flow 文件
1function foo(x: ?number): string {2 if (x) {3 return x; 4 }5 return "default string";6}
3:12-3:12: Cannot return `x` because number [1] is incompatible with string [2]. [incompatible-return]
请注意,函数参数中添加了类型,以及函数末尾的返回类型。您可能可以通过查看此代码来判断函数的返回类型存在错误,因为函数也可以返回一个 number
。但是,您不需要目视检查代码,因为 Flow 后台进程会在您 检查代码 时为您捕获此错误。
检查您的代码
Flow 的优点在于,您可以获得代码状态的近乎实时反馈。在您想要检查错误的任何时候,只需运行
# equivalent to `flow status`
flow
第一次运行此命令时,将生成 Flow 后台进程,并检查所有 Flow 文件。然后,当您继续迭代项目时,后台进程会持续监控您的代码,这样,当您再次运行 flow
时,更新的结果将几乎是即时的。
对于 上面的代码,运行 flow
将产生
3:12-3:12: Cannot return `x` because number is incompatible with string. [incompatible-return]