Я использую синтаксис перегрузки 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, не может перехватить перегрузку:
![](https://i.stack.imgur.com/a4I81.png)
В основном он видит только первую перегрузку. Достаточно ли продвинута поддержка JSDoc в TypeScript, чтобы я мог набирать код JavaScript в той же степени, что и аналог TypeScript? Как бы это выглядело?