使用flow来规范javascript的变量类型


Posted in Javascript onSeptember 12, 2019

众所周知, js是弱类型的语言,由此有了很多的优点,也出现了大量由此导致的错误,难以定位。当然有类似于ts之类的语法糖来解决此问题,ts因为是从c#演变而来的,所以入门有一定的门槛,所以我们来一下flow这个更轻巧的工具。

先来看一下flow在vs code中的表现效果:

使用flow来规范javascript的变量类型

跟ts的提示类似,它会实时检测所有的包含flow注释的文件,在vscode中需要安装Flow Language Support插件.

如何安装

安装过程可以使用yarn和npm安装,推荐使用yarn,因为安装起来会更快。

yarn add --dev @babel/core @babel/cli @babel/preset-flow

 然后在.babelrc中添加此插件

{
 "presets": ["@babel/preset-flow"]
}

 添加flow-bin的依赖

yarn add --dev flow-bin

 执行flow:

yarn run flow

执行成功后,会在后台启动一个进程进行监听,如果你已经安装了vscode的插件的话,可以忽略这一步,插件会自动启用flow.

 使用强类型

做完上面这些后,你就可以在你的js文件中使用强类型来约束你的代码了,在需要使用flow的文件头部添加/ / @flow

// @flow
function foo(x: ?number): string {
 if (x) {
  return x;
 }
 return "default string";
}

然后运行 yarn run flow  你就可以看到如下的输出

test.js:5
 5:   return x;
        ^ number. This type is incompatible with the expected return type of
 3: function foo(x: ?number): string {
                ^^^^^^ string

如果你使用vscode的插件,就会在保存的时候自动提示这些错误出来,如第一张示例图片那样。

相关资料:

flow官网:https://flow.org/en/

在线尝试:https://flow.org/try/

总结

以上所述是小编给大家介绍的使用flow来规范javascript的变量类型,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery实现高亮显示网页关键词的方法
Aug 07 Javascript
jQuery实用技巧必备(下)
Nov 03 Javascript
jQuery同步提交示例代码
Dec 12 Javascript
Javascript removeChild()删除节点及删除子节点的方法
Dec 27 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 jQuery
关于Google发布的JavaScript代码规范你要知道哪些
Apr 04 Javascript
详解redux异步操作实践
Aug 15 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
Jan 24 Javascript
js图片查看器插件用法示例
Jun 22 Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 Javascript
vue 插槽简介及使用示例
Nov 19 Vue.js
LayUI数据接口返回实体封装的例子
Sep 12 #Javascript
浅谈layui 数据表格前后台传值的问题
Sep 12 #Javascript
layui框架与SSM前后台交互的方法
Sep 12 #Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
Sep 12 #Javascript
解决layui表格内文本超出隐藏的问题
Sep 12 #Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
Sep 12 #Javascript
JS计算斐波拉切代码实例
Sep 12 #Javascript
You might like
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
PHP微信支付开发实例
2016/06/22 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
[19:26]TNC vs EG (BO3)
2018/06/07 DOTA
基于python socketserver框架全面解析
2017/09/21 Python
python编写分类决策树的代码
2017/12/21 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
深入解析神经网络从原理到实现
2019/07/26 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
大学毕业寄语大全
2014/04/10 职场文书
2015年试用期工作总结
2014/12/12 职场文书
先进班组材料范文
2014/12/25 职场文书
党员检讨书范文
2014/12/27 职场文书
单位考核聘任报告
2015/03/02 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android