Flow 类型检测

302 阅读3分钟

因为我们javascript是弱类型语言,所以有些时候编译,或者重构的时候会遇到一些各种各样的问题,所以我们今天就 简单 说一下 Flow类型检测工具!

弱类型的问题

  • 运行阶段才能发现问题
  • obj.foo()\
    //这样写不会报错,只会在运行的时候报错\
    
    
  • 可能会改变函数的作用
  • return a+b;\
    }\
    console.log(sum(100,100)) //200\
    console.log(sum(100,'100')) //100100\
    ​\
    //这样就改变了函数的作用了
    
  • 对象索引器的错误用法
  • obj[true] = 100\
    console.log(obj['true']) //这样照常输出来啦
    
    
    
    

强类型的优势

  • 错误更早暴露
  • 代码更智能,编码更准确
  • 重构更加牢靠,例如修改某个方法名,强类型会在其他的地方有引用的都会报错,这样方便我们修改重构
  • 减少不变要的类型判断

\

Flow 类型检查器

使用方式

  • yarn init
  • yarn add flow
  • yarn flow init
  • 在文件加上 里面的头部加上 //@flow
  • yarn flow

flow移除注解

  • yarn add flow-remove-types --dev //先安装
  • yarn flow-remove-types . -d dist //.是当前目录 dist是输出目录

或者使用babel

  • yarn add @babel/core @babel/cli @babel/preset-flow
  • 然后新建一个 .babelrc文件 里面写上 {"presets":["@babel/preset-flow"]}
  • yarn babel . -d dist

开发工具插件

Flow Language Support 可以更方便的 在我们编写代码的时候提示

\

flow还可以自动推断类型 最好还是自己添加注解

类型注解

  function square(n:number){
      return n*n
  }
 let num:number = 100function foo():void{
     
 }

Flow 原始类型

 const a:string = 'foo'
 const b:number = 2333
 const c:boolean = false
 const d:null = null
 const e:void = undefined
 const f:symbol = Symbol()

Flow数组类型

 const arr1: Array<number> = [1,2,3]
 const arr2: number[] = [1,2]
 ​
 //这种固定参数 以及类型的   称之为元组
 const foo:[string,number] = ['foo',33]

Flow对象类型

  • 规定键名 以及键值的类型
  • ?是可选参数
  • 通过[] 还可以规定键的类型
 const obj1: { foo:string, bar:number} = {foo:'string',bar:100}
 const obj2: {foo?:string,bar:number} = {bar:100}
 const obj3:{[string]:string} ={}

函数类型

  • 如果传入的是一个函数 可以设置函数的参数类型 以及返回值类型
 function foo(callback:(string,number)=>void){
     callback('string',100)
 }

特殊类型

  • 字面量类型
  • 一般配合联名声明
 const a:'foo'= 'foo'
 const type: 'success' | 'warning' | 'error' = 'success'
 type StringOrBoolean = string | boolean
 const b:StringOrBoolean = 'string'const gender:?number =undefined
 //相当于
 const gender: number | null |undefined

Mixed$Any

  • 都可以接收任意类型的参数
  • any是弱类型 定义的时候不会报错
  • mixed是强类型 定义的时候如果不一样 就会报错
 //会报错
 function foo(value:mixed){
     a*a
     value.substr(1)
 }
 ​
 //不会报错
 function foo(value:any){
     a*a
     value.substr(1)
 }

\

类型小结

这个网址可以 可以了解更详细的

Flow Type Cheat Sheet​www.saltycrane.com/cheat-sheets/flow-type/latest/

最后,如果对你有帮助 记得 点赞! 收藏哟~

如果喜欢博主的 记得点波关注哦!!!