[英]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.