Перегруженная функция JSDoc не работает с TypeScript - PullRequest
0 голосов
/ 19 января 2019

Я использую синтаксис перегрузки 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. В обычном 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, как он у меня, вероятно, неверен, потому что вывод TypeScript, предоставленный службой языка VS Code, не может перехватить перегрузку:

В основном он видит только первую перегрузку. Достаточно ли продвинута поддержка JSDoc в TypeScript, чтобы я мог набирать код JavaScript в той же степени, что и аналог TypeScript? Как бы это выглядело?

...