使用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 相关文章推荐
javascript实现的listview效果
Apr 28 Javascript
javascript 学习笔记(onchange等)
Nov 14 Javascript
jQuery实现简单二级下拉菜单
Apr 12 Javascript
JavaScript动态添加事件之事件委托
Jul 12 Javascript
懒加载实现的分页&&网站footer自适应
Dec 21 Javascript
Express之get,pos请求参数的获取
May 02 Javascript
js+html5实现侧滑页面效果
Jul 15 Javascript
vue使用laydate时间插件的方法
Nov 14 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
Jul 24 Javascript
uniapp电商小程序实现订单30分钟倒计时
Nov 01 Javascript
微信小程序实现加入购物车滑动轨迹
Nov 18 Javascript
Js实现粘贴上传图片的原理及示例
Dec 09 Javascript
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 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
php中session使用示例
2014/03/29 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
JavaScript基本对象
2007/01/11 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
python中二维阵列的变换实例
2014/10/09 Python
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
python @property的用法及含义全面解析
2018/02/01 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
Python 互换字典的键值对实例
2019/02/12 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
Python post请求实现代码实例
2020/02/28 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
高三励志标语
2014/06/05 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
先进典型发言材料
2014/12/30 职场文书
房屋产权证明书
2015/06/19 职场文书
《秋思》教学反思
2016/02/23 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
如何用python反转图片,视频
2021/04/24 Python
Python基于百度AI实现抓取表情包
2021/06/27 Python