使用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有关的小细节
Apr 02 Javascript
JS 常用校验函数
Mar 26 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
Dec 28 Javascript
jquery ready(fn)事件使用介绍
Aug 21 Javascript
JavaScript日期时间与时间戳的转换函数分享
Jan 31 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
jquery实现(textarea)placeholder自动换行
Dec 22 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
js实现简单模态框实例
Nov 16 Javascript
微信小程序自定义波浪组件使用方法详解
Sep 21 Javascript
单线程JavaScript实现异步过程详解
May 19 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 文件上传类代码
2011/08/06 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
2013/01/13 PHP
PHP中echo和print的区别
2014/08/28 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python计算两个地址之间的距离方法
2018/06/09 Python
Django框架自定义session处理操作示例
2019/05/27 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
python实现双人五子棋(终端版)
2020/12/30 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
澳大利亚家具商店:Freedom
2020/12/17 全球购物
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS