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

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

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

网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立在超文本基础之上的。超级文本标记语言之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点。
本篇文章给大家带来的内容是关于javascript静态类型如何解析flow的用法(详细) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

起因

遍寻百度,google,没发现flow的中文文档,这对国内显然是不友好的,虽说flow 平时用不着, 但是一般框架都会用一下,以便用户可以准确的使用框架,可以避免很多谜一样的BUG,既然没有,那我就来翻译一下咯.计划先翻译类型注释(types annotations)部分,安装的一搜一大把.

flow 类型注释

当你的类型不注释的时候, flow 就不起作用了,so 来看看 flow 类型 可以如何注释. 可不是 // 这个注释

原始类型

javascript 一共有6钟原始数据类型.

  • Booleans

  • Strings

  • Numbers

  • null

  • undefined (void in Flow types)

  • Symbols (new in ECMAScript 2015, not yet supported in Flow) flow 不支持symbols

原始类型分两种,一种是字面量的, 一种是包装过的 比如 3 跟 Number(3);
比如下面这样,你只能传 字面量.booleans 除外

// @flow
function method(x: number, y: string, z: boolean) {
  // ...
}

method(3.14, "hello", true);

booleans

flow 可以识别 !!x 和 Boolean(0) 的明确类型转换的boolean

// @flow
function acceptsBoolean(value: boolean) {
  // ...
}

acceptsBoolean(0);          // Error! 错误
acceptsBoolean(Boolean(0)); // Works! OK
acceptsBoolean(!!0);        // Works! OK

number

数字就很明确了

// @flow
function acceptsNumber(value: number) {
  // ...
}

acceptsNumber(42);       // Works!
acceptsNumber(3.14);     // Works!
acceptsNumber(NaN);      // Works!
acceptsNumber(Infinity); // Works!
acceptsNumber("foo");    // Error!

string

// @flow
function acceptsString(value: string) {
  // ...
}

acceptsString("foo"); // Works!
acceptsString(false); // Error!

js中 字符串会有隐藏的转换

    "foo" + 42; // "foo42"
    "foo" + {}; // "foo[object Object]"

flow 只支持数字和字符串的隐藏转换

    // @flow
    "foo" + "foo"; // Works!
    "foo" + 42;    // Works!
    "foo" + {};    // Error!
    "foo" + [];    // Error!

如果你要使用, 必须要明确转换

    // @flow
    "foo" + String({});     // Works!
    "foo" + [].toString();  // Works!
    "" + JSON.stringify({}) // Works!

null 和 undefined

在flow中 undefined 是 void

    // @flow
    function acceptsNull(value: null) {
      /* ... */
    }

    function acceptsUndefined(value: void) {
      /* ... */
    }
    acceptsNull(null);      // Works!
    acceptsNull(undefined); // Error!
    acceptsUndefined(null);      // Error!
    acceptsUndefined(undefined); // Works!

可能的类型

可能的类型, 是要用再 那些可选的值, 你可以使用一个问号来标记他, 证明这个值是可选的,并不是必须的

    // @flow
    function acceptsMaybeString(value: ?string) {
      // ...
    }

    acceptsMaybeString("bar");     // Works!
    acceptsMaybeString(undefined); // Works!
    acceptsMaybeString(null);      // Works!
    acceptsMaybeString();          // Works!

对象属性选项

你可以用一个问号来表示该对象的某个属性是可有可无的

    // @flow
    function acceptsObject(value: { foo?: string }) {
      // ...
    }

    acceptsObject({ foo: "bar" });     // Works!
    acceptsObject({ foo: undefined }); // Works!
    acceptsObject({ foo: null });      // Error!
    acceptsObject({});                 // Works!

这个值可以是undefined 但是 他不能是null

函数参数的选项

加个问号标明,这个函数的参数可可选的

    // @flow
    function acceptsOptionalString(value?: string) {
      // ...
    }

    acceptsOptionalString("bar");     // Works!
    acceptsOptionalString(undefined); // Works!
    acceptsOptionalString(null);      // Error!
    acceptsOptionalString();          // Works!

函数的默认参数

es5 的新特性

    // @flow
    function acceptsOptionalString(value: string = "foo") {
      // ...
    }

    acceptsOptionalString("bar");     // Works!
    acceptsOptionalString(undefined); // Works!
    acceptsOptionalString(null);      // Error!
    acceptsOptionalString();          // Works!

symbol

flow未支持

字面类型

flow 不止可以指定类型, 他还可以指定某个特定的值. 非常牛掰

如:

    // @flow
    function acceptsTwo(value: 2) {
      // ...
    }

    acceptsTwo(2);   // Works!
    // $ExpectError
    acceptsTwo(3);   // Error!
    // $ExpectError
    acceptsTwo("2"); // Error!

如:

// @flow
function getColor(name: "success"   

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




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

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

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