繁体   English   中英

JSDoc 重载 function 不与 TypeScript 一起工作

[英]JSDoc overloaded function not working with TypeScript

我正在使用其他问题和在线建议的 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 ,这个 function 应该返回string result ,如果输入参数的类型是number ,它应该返回number result 在正常的 TypeScript 中,这将是:

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 Code 语言服务提供的 TypeScript 推理无法接收重载:

基本上它只看到第一个过载。 TypeScript 中的 JSDoc 支持是否足够先进,让我能够以与 TypeScript 对应的相同程度键入 JavaScript 代码? 那看起来怎么样?

更新:包括我的首选方法

/**
 * @callback ConvertNumberToArray
 * @param {number} input
 * @return {number[]}
 *
 * @callback keepStrings
 * @param {string} input
 * @return {string}
 */

/**
 * @type {ConvertNumberToArray & keepStrings}
 */
const parse = input => {
  if (typeof input === 'number') return [input]
  else return input
}

它在 VSCode 中的样子

在此处输入图像描述


原帖:看看这里https://austingil.com/typescript-function-overloads-with-jsdoc/

例子

/**
 * @type {{
 * (input: number) => number;
 * (input: string) => string;
 * }}
 */
const double = (input) => {
  if (typeof input === 'number') {
    return input * 2
  }
  return input + input
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM