BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 李士窑 关注 0 他的粉丝 发布于 2014年11月26日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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 LeroyDamien Doligez等人于1996年基于函数式编程语言Caml创立的一个开源项目,并在面向对象方面做了扩展。另外,除了Flow外,还有前端领域的大牛Douglas Crockford编写的JavaScript静态类型检查工具JSLint以及JSLint的一个分支——开源项目JSHint等。


感谢郭蕾对本文的审校。

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT