我正在使用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代码相同的程度?看起来怎么样?