初探 Flow 类型检查(1)

js语言特征介绍

js是一种弱类型 动态类型检查的语言

弱类型?

再定义变量的时候,我们可以为变量赋值任何数据,变量的类型不是固定的,这样的类型叫弱类型,如

var a = 10;
var a = function () {}

强类型?

以java为例,在声明变量的时候,一旦给变量赋值,那么变量的数据类型就已经确定,之后如果要给变量赋值其他类型的数据,需要进行强制数据类型转换

int a = 10;  //定位为整型
a = "10";    //这样是不允许的,如果非要赋值,先转换成整型再赋值 a = parseInt("10")

动态类型和静态类型

两者的核心区别: 动态类型的检查会在代码运行的时候进行检查,而静待类型的类型检查则是再编译时

var obj = {};
obj.forEach(function(v,i){})  //运行时报错,

结论:js 运行时类型检查,为动态类型语言

int a = 10;  
a = "10";    //编译时报错,还没运行

结论:java 编译时类型检查,为静态类型语言

静态动态类型的影响

例如下段代码,想要的功能是参数arr数组内成员相加;
但这时若参数不是数组,或者不传参…… 为引起程序报错
静态检查类型时,在编译时报错
动态检查则在运行时报错,不能提前发现bug

function sum(arr) {  
	let result = 0
	arr.forEach(v => {
		result += v
	})
	return result
}

sum()

为了使代码健壮 我们常规需要在代码里这样做,才够使代码稳定,里边非必要的代码 在静态类型中是非必要的,但是在动态类型里确不得不写;

function sum(arr) {   
	//非必要代码
	if (!arr) throw new Error('函数需要传参')
	if (!Array.isArray(arr)) throw new Error('函数需要一个数组作为参数')
	if (!arr.every(v => typeof v === 'number')) throw new Error('函数需要的数组为数字数组!')
	//非必要代码结束
	
	let result = 0
	arr.forEach(v => {
		result += v
	})
	return result
}
sum()
sum('d')
sum([1,2])

为了解决 上述注释的内容 ,就是把js变成静态类型的语言;
如何在js开发中使用静态类型呢? 就是应用Flow与TypeScript;
本次先进行Flow的分享

1.Flow

FackBook的开源技术,轻量 ,上手容易
https://flow.org/ 英文文档

扫描二维码关注公众号,回复: 5618718 查看本文章

2.TypeScript 微软公司开发的语言,稍重,出现时间较早

缺点:

  1. 增加代码量
  2. 花时间掌握类型
  3. 可能会降低开发效率

优点:

  1. 促进更可靠的重构

假如在项目中我们要对调用方法的 参数进行修改,以前我们会犹豫凡是调用的地方改全与否,而有了静态类型检查,类型检查会自动告诉我们修改后的代码哪里存在问题,我们指需要按照指示修复即可

  1. 静态类型增强IDE的功能

背景及原理我们清楚了 ,下一节我们正式书写Flow

猜你喜欢

转载自blog.csdn.net/weixin_41643133/article/details/84638285