代码之家  ›  专栏  ›  技术社区  ›  Buggy

Flowtype:如何创建类型保护函数?

  •  1
  • Buggy  · 技术社区  · 6 年前

    type refinements 从函数。 如何创建 type guard

    TypeScript示例:

    function isString(arg: Showable): arg is string {
        return typeof arg === 'string';
    }
    

    流量

    /* @flow */
    type Showable = number | string;
    
    // ok
    function barOk (arg: Showable) {
      return typeof arg === 'string' ? arg.length : (arg + 1);
    }
    
    // type guard function
    function isString(arg: Showable) {
        return typeof arg === 'string';
    }
    
    // Error
    function barError (arg: Showable) {
      return isString(arg) ? arg.length : (arg + 1);
                             // ^ Cannot get `arg.length` because property `length` is missing in `Number`
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Buggy    6 年前

    改变你的想法 isString 功能如下:

    function isString(arg: Showable): boolean %checks {
        return typeof arg === 'string';
    }
    

    Predicate Functions