Static Type Checker For JavaScript
静态类型检查工具
Flow能够给JavaScript提供静态类型检查的能力,其实就是为javascript添加了一个编译过程。
npm i flow-bin -D
// 文件中需要添加一个标记 告诉flow当前文件需要进行类型检查!
// @flow
var 变量 /*: 类型*/ = 数据
var 变量: 类型 = 数据
npm init -y
npm i flow-bin -D
var 变量: 数据类型 = 数据;
在pacakge.json文件中,scripts属性中添加flow命令
需要为flow创建一个配置文件.flowconfig
npm run flow init
npm run flow
如果给数据添加类型声明是通过第二种方式,直接修改的js代码,那么代码是不能正常运行的
我们需要通过babel对代码进行转码之后才能正常运行
npm i babel-cli babel-preset-flow -D
npm run build
// number类型
// number类型可以赋值的内容为: 数字、NaN、Infinity
let a: number = 100;
let b: number = NaN;
let c: number = Infinity;
// string类型
// string类型可以赋值的内容为: 字符串
let str: string = "abc";
// boolean 布尔值类型
// void javascript中的undefined
// null js中的null
// Array类型
// 在声明数据为数组类型的时候,我们需要为数组指定元素的类型
let arr: Array<number> = [1, 2, 3, 4];
let name: any = 123;
name = "123"
let arr1: Array<any> = [1, 'a', {}, []];
function test(a: number, b: number): number{
return a + b;
}
// var a: string = test(1, 2);
// 可以将变量声明为函数类型
// 也就意味着我们可以指定为变量赋值的函数的类型
let func: (a: number, b: number) => string = test;
function ajax(callback: (data: Object) => void) {
}
ajax(function (obj: Object) {
})
function test(a: ?number) {
a = a || 0;
console.log(a);
}
test(10);
test();
// Maybe类型相当于给数据添加了两个可能的类型null和void
// let a: number|string = 10;
// a = "abc";
// a = {};
// 类型推断
function test(a: number, b: number) {
return a + b;
}
let c: string = test(1, 2);
// @flow
// function greet(obj: { sayHello: () => void, name: string }) {
// obj.sayHello();
// }
// var o = {
// name: "张学友",
// sayHello() {
// console.log("Hello")
// }
// }
// greet(o);
function ajax(option: {url: string, type: string, success: (data: Object) => void}) {
}
// option需要有url参数,还需要有type参数 还需要有success参数
ajax({});