美文网首页JavaScript 进阶营
vue源码学习 --- flow学习(1)

vue源码学习 --- flow学习(1)

作者: 2分_08b6 | 来源:发表于2019-01-09 14:36 被阅读0次

    > 原文: https://flow.org/en/docs/types/primitives/

    # 一. flow的作用

    静态检测JavaScript类型,可以在编译阶段(说法不太准)识别出错误,规避运行时才显现的bug

    # 二. 基本类型

    // @flow

    /**

    * JavaScript 基本类型在flow中使用

    */

    /**

    * boolean

    * 如下例子中,只接受一个boolean的参数,一个到达acceptsBoolean函数不再需要转换为boolean的参数(因此不接受0,'str'等值)

    */

    function acceptsBoolean(value: boolean) {

      // ...

    }

    acceptsBoolean(true); // work

    acceptsBoolean(false); // work

    // acceptsBoolean('foo'); // error

    // acceptsBoolean(0); // error

    acceptsBoolean(Boolean(0)); // Works!

    acceptsBoolean(!0);        // Works!

    acceptsBoolean(!0);        // Works!

    /**

    * number

    */

    function acceptsNumber(value: number) {

      // ...

    }

    acceptsNumber(42);      // Works!

    acceptsNumber(3.14);    // Works!

    acceptsNumber(NaN);      // Works!

    acceptsNumber(Infinity); // Works!

    // acceptsNumber("123");    // Error!

    /**

    * string

    * 同boolean中的js类型隐式转换,当到达acceptsString函数时,是字符串会被接受

    */

    function acceptsString(value: string) {

      // ...

    }

    acceptsString("foo"); // Works!

    // acceptsString(false); // Error!

    acceptsString("foo" + 42); // Works!

    // acceptsString("foo" + {}); // Error!

    /**

    * null 和 void(void is undefined in javascript)

    */

    function acceptsNull(value: null) {

      /* ... */

    }

    function acceptsUndefined(value: void) {

      /* ... */

    }

    acceptsNull(null);      // Works!

    // acceptsNull(undefined);      // Error!

    // acceptsNull(undefined);      // Error!

    acceptsNull(null);      // Works!

    /**

    * 可能是 null 和 void(undefined) 和 空值, (属性值前加?)

    */

    function acceptsMaybeString(value: ?string) {

      // ...

    }

    acceptsMaybeString("bar");    // Works!

    acceptsMaybeString(undefined); // Works!

    acceptsMaybeString(null);      // Works!

    acceptsMaybeString();          // Works!

    /**

    * 对象属性前加?

    */

    function acceptsObject(value: { foo?: string }) {

      // ...

    }

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

    acceptsObject({ foo: undefined }); // Works!

    // acceptsObject({ foo: null });      // Error!

    acceptsObject({});                // Works!

    function acceptsOptionalString(value?: string) {

      // ...

    }

    acceptsOptionalString("bar");    // Works!

    acceptsOptionalString(undefined); // Works!

    // acceptsOptionalString(null);      // Error!

    acceptsOptionalString();          // Works!

    /**

    * 默认值

    */

    function acceptsOptionalString(value: string = "foo") {

      // ...

    }

    acceptsOptionalString("bar");    // Works!

    acceptsOptionalString(undefined); // Works!

    // acceptsOptionalString(null);      // Error!

    acceptsOptionalString();          // Works!

    /**

    * Symbol 不支持

    */

    > vue源码学习 --- flow学习(2)

    https://www.jianshu.com/p/1f815ef14fe0

    相关文章

      网友评论

        本文标题:vue源码学习 --- flow学习(1)

        本文链接:https://www.haomeiwen.com/subject/riowrqtx.html