最近工作清闲,静下心来有必要温故而知新,每次温故都有不同的见解,收获。
打开VUE源码,我看到了一脸懵逼的代码,我竟到了这JS代码都看不明白的地步唉。
/* @flow */
export function isDef (v: any): boolean %checks {
return v !== undefined && v !== null
}
上面代码里用到了flow的知识:Flow 是javascript代码的静态类型检查工具。
我对(v:any) :boolean %checks 这段一脸无知。查阅资料。
%check的含义如下 (https://flow.org/en/docs/types/functions/)
翻译出来的意思是:
简言之就是谓词函数,可自行百度。(关键词:flow 谓词函数)
那 (v: any): boolean呢?
我们常用下面这种弱类形式写代码,请见。
function add(num1, num2) {
return num1 + num2;
}
var result = add(1, '2');
console.log(result); // 输出:12
如果我们想对参数或者返回值做强制检查,如果不是期望的值就抛出异常。(当然,这一需求手动写也可以实现,但flow有了它后,方便多了。)
// @flow
function add(num1:number, num2:number) :number {
return num1 + num2;
}
var result = add(1, 2);
如上代码,num1:number 和 num2:number 的含义是:num1 和 num2 传递的参数都为数字类型的,:number {} 中的 :number的含义是:希望返回结果也是数字类型。
如果对于flow想更深入,更全面的学习。(个人觉得没必要,知道有这玩意儿就行了,毕竟实际开发中用的极少)。那就自行百度吧。