Flow: Facebook出品的JavaScript静态类型检查工具

Flow是Facebook出品的一个JavaScript代码的静态类型检查工具,该工具采用开放源码的OCaml(Objective Caml)语言开发, 并遵守BSD开源协议发布,其代码托管在GitHub上。Flow能够帮助开发人员查找出JavaScript代码中的类型错误,从而提高开发效率和代码质量。Flow已经能够捕获JavaScript代码中的常见问题,如静态类型转换不匹配、空指针引用等问题。同时,Flow还为JavaScript新增了类型语法,如类型别名。当前,Flow已具有以下两个主要特征:

1、 Flow的类型检查具有可选性和自动性

通过使用Flow,开发者能够有针对性地对文件进行检查,当开发者选择一个文件进行检查时,Flow会自动检查相应代码,并报告检查出的错误。但是,对于比较大的lib一类文件,Flow的检查报告有时候会不太精确,不过开发者可以使用“类型注释”人为干预Flow来进行类型检查或者将Flow切换到一种“弱模式”下以提高精确度。

2、Flow的类型检查是一种及时、在线的检查

当对整个代码库进行检查时,Flow首先会对整个代码库的所有文件进行一个初步地分析,然后监控文件的后续变化,并进行类型检查和依赖检查。对于开发者来说,他们根本感觉不出编译时间的延迟。当对代码进行编辑或者批量更新一批文件时,Flow将会自动触发代码检查,并保存检查的结果以备及时查询使用。

目前,Flow还处在早期阶段,仅支持Mac OS X、Linux (64-bit)两种系统。但是,Flow开发团队正在进行快速的迭代开发,新功能将很快在接下来的版本中出现,如支持JavaScript的新标准ECMAScript 6、使用js_of_ocaml编译器将Flow编译成JavaScript代码、为编集成Flow、错误信息的分类和文件的过滤以及改进错误提示以做到能够更好的错误原因提示和错误定位等。Flow已经在Facebook相关项目中使用,Facebook开发团队期待着大家加入到该项目中,并给予宝贵的意见和建议。

Flow类型检查的一个简单实例如下:

/* @flow */
function foo(x) {
  return x * 10;
}
foo(‘Hello, world!');

运行如下命令:

$> flow

将会给出在某行代码出现类型不兼容的提示,并指明应该是什么类型以及实际是什么类型。

Flow官方还提供了使用入门指南,以供大家学习和研究,该指南包括如何在已存在的代码中运行Flow、如何检查第三方代码、如何运行Flow的代码、如何排除问题排除以及代码检查的实例等内容。Flow是个开放源码的项目,所以有兴趣的用户都可以从GitHub库下载其源码并进行深一步的研究。Flow基于高性能的OCaml语言的实现,而OCaml是由Xavier Leroy、Damien Doligez等人于1996年基于函数式编程语言Caml创立的一个开源项目,并在面向对象方面做了扩展。另外,除了Flow外,还有前端领域的大牛Douglas Crockford编写的JavaScript静态类型检查工具JSLint以及JSLint的一个分支——开源项目JSHint等。

感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(Flow: Facebook出品的JavaScript静态类型检查工具)