争怎路由网:是一个主要分享无线路由器安装设置经验的网站,汇总WiFi常见问题的解决方法。

javascript静态分类如何解析flow的用法(详细)

时间:2024/6/4作者:未知来源:争怎路由网人气:

number) { return '' + value; }

你可以像java 的泛型一样(有区别)去标明一个类型,下面的例子 标明,该函数返回的类型跟传进函数的类型相同.

function identity<T>(value: T): T {
  return value;
}

你可以这样来 标记 一个函数可以接受任何类型的参数

    function getTypeOf(value: mixed): string {
      return typeof value;
    }

当你使用 mixed 时候, 虽然你可以传进任何类型, 但是你返回的时候 必须要明确他是什么类型, 不然就报错

    // @flow
    function stringify(value: mixed) {
      // $ExpectError
      return "" + value; // Error!
    }

    stringify("foo");

任何类型(any type)

不要搞混any 和mixed, 如果你想跳过类型检查,那你就用 any 吧

    // @flow
    function add(one: any, two: any): number {
      return one + two;
    }

    add(1, 2);     // Works.
    add("1", "2"); // Works.
    add({}, []);   // Works.

只要两种情况,可以使用 any

  1. 旧代码 新增flow 类型检查,并且 用其他类型的会引起大量错误

  2. 当你明确的知道你的代码不能通过类型检查的时候,

避免泄漏any

当你声明了 传进的参数的any的时候,那么你返回的参数也都是any , 避免这种情况, 需要切断 它

    // @flow
    function fn(obj: any) /* (:number) */ {
      let foo: number = obj.foo; // 这句才是重点, 切断 any
      let bar /* (:number) */ = foo * 2;
      return bar;
    }

    let bar /* (:number) */ = fn({ foo: 2 });
    let baz /* (:string) */ = "baz:" + bar;

可能类型 (maybe type)

就是上面提到的 可以用 ? 问号标记他是可选的类型

变量类型 (variable type)

  • var - 声明一个变量,选择性赋值

  • let - 声明一个块级变量,选择性辅助

  • const - 声明一个块级变量,并赋值,且不能再次赋值

在flow 分为两组, 一组是 let 和 var 可以再次赋值, 另一组是const 不能再次赋值

const

const 可以注入你赋值的类型, 或者你自己手动的指定类型

    // @flow
    const foo /* : number */ = 1;
    const bar: number = 2;

let 和 var

跟上面一样, 这两个也可以自动的注入类型

但是 若你自动注入的类型, 你重新赋值修改的类型的时候并不会得到报错

如果语句,函数,和其他的条件代码,可以精确的指出他是什么类型,那么就可以避免flow 的检查 不然就报错

        // @flow
        let foo = 42;

        function mutate() {
          foo = true;
          foo = "hello";
        }

        mutate();

        // $ExpectError
        let isString: string = foo; // Error!

尽量避免上面的用法(个人推荐)

函数类型(function type)

函数只有两种用法, 要么参数, 要么返回值

    // @flow
    function concat(a: string, b: string): string {
      return a + b;
    }

    concat("foo", "bar"); // Works!
    // $ExpectError
    concat(true, false);  // Error!

声明函数

同上

箭头函数

    (str: string, bool?: boolean, ...nums: Array<number>) => void

带回调的箭头函数

    function method(callback: (error: Error   

关键词:javascript静态分类如何解析flow的用法(详细)




Copyright © 2012-2018 争怎路由网(http://www.zhengzen.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版