使用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插件源码
Jun 24 Javascript
浅谈js中变量初始化
Feb 03 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 Javascript
jQuery超赞的评分插件(8款)
Aug 20 Javascript
javascript设计简单的秒表计时器
Sep 05 Javascript
window.onload绑定多个事件的两种解决方案
May 15 Javascript
简单谈谈JS数组中的indexOf方法
Oct 13 Javascript
微信小程序  modal弹框组件详解
Oct 27 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
Jan 12 Javascript
深入理解AngularJs-scope的脏检查(一)
Jun 19 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
May 18 Javascript
深入了解query和params的使用区别
Jun 24 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
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
python生成验证码图片代码分享
2016/01/28 Python
python中reload(module)的用法示例详解
2017/09/15 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
对python 自定义协议的方法详解
2019/02/13 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
python实现共轭梯度法
2019/07/03 Python
python如何判断IP地址合法性
2020/04/05 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
违反校纪校规检讨书
2014/02/15 职场文书
老同学聚会感言
2014/02/23 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书