代码之家  ›  专栏  ›  技术社区  ›  TomáÅ¡ Hübelbauer

jsdoc重载函数不使用typescript

  •  1
  • TomáÅ¡ Hübelbauer  · 技术社区  · 5 年前

    我正在使用jsdoc重载语法,正如其他问题和联机问题中所建议的那样,不确定是否正确,但下面是:

    /**
     * @param {string} param
     * @returns {'string result'}
     *//**
    * @param {number} param
    * @returns {'number result'}
    */
    function overloaded(param) {
      switch (typeof param) {
        case 'string': return 'string result';
        case 'number': return 'number result';
      }
    
      throw new Error(`Invalid type: ${typeof param}`);
    }
    
    overloaded('seven');
    overloaded(7);
    

    此函数应返回 string result 如果输入参数的类型是 string 它应该会回来 number result 如果输入参数的类型是 number . 在普通类型脚本中,这将是:

    function overloaded2(param: string): 'string result';
    function overloaded2(param: number): 'number result';
    function overloaded2(param: string | number): 'string result' | 'number result' {
    switch (typeof param) {
        case 'string': return 'string result';
        case 'number': return 'number result';
    }
    
    throw new Error(`Invalid type: ${typeof param}`);
    }
    
    overloaded2('seven');
    overloaded2(7);
    

    问题是,我拥有的jsdoc可能不正确,因为vs代码语言服务提供的typescript推断无法获取重载:

    基本上它只看到第一个过载。typescript中的jsdoc支持是否足够高级,使我能够键入与typescript对应的javascript代码相同的程度?看起来怎么样?

    0 回复  |  直到 5 年前