在很多大型前端框架、插件中都有使用到flow去做类型检测的(react、vue、core)。
安装flow
yarn add flow-bin -dev
?运行时直接使用
yarn flow
会报错提示
?执行flow init可能会报错
解决方法:
现在文件顶部有
// @flow
/* @flow */
的文件就会在执行yarn flow的时候被检验
flow的检验会和vscode的JavaScript校验冲突,需要将其设置为false
“javascript.validate.enable”: false
这个注解是在编译的时候去判断类型,生产的时候不需要,
有两种方法:
命令执行检测太过于麻烦,可以直接安装flow插件来在代码中直接提示
flow类型推断
// @flow
// 没有给出类型会推断需要number类型,给的string会报错
function square(n) {
return n * n
}
square('2')
类型注释:?
// @flow
function add(num: number, num1: number) {
return num + num1
}
let num: number = 100;
function a(): number {
return 1
}
function bb(): void {
}
flow的原始类型
const s:string = '1234'
const numb: number = 1234
const b: boolean = true
const d:null = null
const f:void = undefined
const ff: symbol = Symbol()
?flow 数组类型和元组
const list :Array<number> = [1,2,3]
const numberArray :number[] = [1,2,3]
// 元组
const arr :[number, string] = [1,'2']
flow对象类型
const obj : {age?: number, name: string} = {age:10, name:'张三'}
const obj1 : {[string]: number} = {}
?flow 函数类型
function f(callback: (string,number)=> void) {
callback('123', 123)
}
f(function(str,num) {})
flow 特殊类型
// 只能是这个值
const a: 'foo' = 'foo'
const b : 'big' | 'small' | 'middle' = 'big'
const c: string | nmuber = 10
// 表示可以是null 和undefined
const d: ?number = undefined
const f: number|null|void = undefined
?flow 任意类型 mixed和any
function mixedFun(value: mixed) {
if (typeof value === string) {
value.substr(1)
}
if (typeof value === number) {
value = value * value
}
}
mixedFun('123')
mixedFun(123)
function mixedFun1(value: any) {
value.substr(1)
value = value * value
}
mixedFun1(123)
mixedFun1('123')
flow的其他类型成员