Flow的简单使用

Flow 是 Facebook 旗下一个为 JavaScript 进行静态类型检测的检测工具。它可以在 JavaScript 的项目中用来捕获常见的 bugs,比如隐式类型转换,空引用等等。
下面根据官网的介绍,简单说下 flow 的简单使用,更详细高级的功能以及 Flow 的安装方法,可以到官网上查看。

首先,我们需要创建一个简单的项目,如下:
a. 创建目录: mkdir testFlow
b. 进入目录:cd testFlow
接着我们通过 flow init 命令对 Flow 进行初始化。这时我们可以通过 ls -a 来查看目录,发现创建了一个 .flowconfig 文件,有了这个文件,我们就可以通过 check 命令来检测和这个文件同级目录以及子目录上的 js 文件的语法问题了。
查看文件
现在我们可以使用命令:flow check 进行文件的检测了,不过现在没有文件,所以会显示 Found 0 errors。另外,这个命令每次执行都会重新检测所有文件。但是我们在大的项目中,可能只想它 check 新添加的文件或者被修改的文件,Flow 允许你通过 client/server 的架构来启动 Flow 服务器,让它在后台进行文件的监听。方法很简单,一条 flow 命令就能完成 Flow 服务器启动,文件检测,被更改文件的检测,即第一次使用 flow 命令会启动 Flow 服务器并且首次检测文件,再次使用 flow 命令会连接 Flow 服务器并且检测文件,之后使用 flow 命令时将会连接 Flow 服务器并且对修改过的文件进行检测。
如果想停止 Flow 服务器,通过 flow stop 即可。
现在,我们创建一个 js 文件, 输入如下内容:

1
2
3
4
5
6
7
8
/* @flow*/

function test(n: number){
var num = 3;
return num + n;
}

test('hello');

代码的开头通过 @flow 告诉 Flow 这个文件需要进行类型的检测。下面,执行 flow check 命令进行文件检测。
检测文件
因为我们在定义函数的时候声明了参数 n 是 number 类型,所以在调用处就可以清晰的看到显示的错误情况了。如果我们就想让 String 类型和 number 类型相加怎么办,试试将参数的类型声明去掉会是什么效果呢?如下:

1
2
3
4
5
6
7
8
/* @flow*/

function test(n){
var num = 3;
return num + n;
}

test('hello');

执行 flow check 命令进行文件检测。
文件检测
这次可以看到,没有报错。现在,假设我们既不想写类型声明,有想让它检测到错误,那又要怎么做呢?这时可以将 @flow 改为 @flow weak,如下:

1
2
3
4
5
6
7
8
/* @flow weak*/

function test(n){
var num = 3;
return num + n;
}

test('hello');

执行 flow check 命令进行文件检测。
文件检测
从图中可以看到检测出了错误。
如果想让 Flow 检测所有文件,包括文件开始没有使用 @flow 声明的文件,可以使用 flow check --all 命令。
Flow 的功能很强大,想了解更多内容的话官方非常的详细。