一个 JavaScript 静态类型检测器

类型接口#

Flow 使用类型接口查找错误,甚至不需要任何类型声明。 它也能够准确地跟踪变量的类型,就像运行时那样。

JS 风格#

Flow 专为 JavaScript 程序员设计。 他能够理解常用 JS 方言和极具动态的特性

实时反馈#

Flow 能立刻检测代码变化,在开发 JS 时提供快速不断地反馈

Flow 能在 JS 运行前找出常见的 bug,包括:

  • 自动类型转换,
  • null 引用,
  • 可怕的 undefined is not a function.
1
2
3
4
5
// @flow
function foo(x) {
  return x * 10;
}
foo('Hello, world!');
show Flow output hide Flow output
$> flow
5: foo('Hello, world!');
   ^^^^^^^^^^^^^^^^^^^^ function call
3:   return x * 10;
            ^ string. This type is incompatible with
3:   return x * 10;
            ^^^^^^ number

Flow 允许你『平缓地』增加类型断言,

1
2
3
4
5
// @flow
function bar(x): string {
  return x.length;
}
bar('Hello, world!');
show Flow output hide Flow output
$> flow
3:   return x.length;
            ^^^^^^^^ number. This type is incompatible with the expected return type of
2: function bar(x): string {
                    ^^^^^^ string

带有 Flow 类型注解的 JS 代码可以 简单转化 为常规的 JS 代码,所以随处运行