我一直在尝试使用 JSDoc 记录 JS 中的重载函数:
有 2 个用例:
assignSlave(ticket, userid);
assignSlave(ticket, firstname, lastname);
我希望它在 VSCode 中看起来像这样:
案例1
案例2
等等...
我尝试了JSDoc中的文档重载函数中给出的解决方案,但它对我不起作用:
/**
* Test
*
* @function assignSlave
* @param {String} ticket
* @param {String} userid
*//**
* Test2
*
* @function assignSlave
* @param {String} ticket
* @param {String} firstname
* @param {String} lastname
*/
function assignSlave(a, b, c){}
assignSlave()
我明白了:
有办法实现我想要做的事情吗?
我读了这篇文章,但不确定它在我的情况下是如何工作的。
在 TypeScript 5 中,您可以使用新的
@overload
标签:
/**
* @overload
* @param {string} ticket
* @param {string} userId
*//**
* @overload
* @param {string} ticket
* @param {string} firstname
* @param {string} lastname
*//**
* @param {string} a
* @param {string} b
* @param {string} c
*/
function assignSlave(a, b, c) {}
供参考:https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#overload-support-in-jsdoc
像下面的代码片段那样做。从
function
更改为 arrow function
并相应地设置其类型。最后一件事是为尾随参数分配默认值,以便重载类型彼此兼容。
/**
* @type {{
* (ticket: string, userid: string): void;
* (ticket: string, firstname: string, lastname: string): void;
* }}
*/
const assignSlave = (a, b, c = '') => {}
assignSlave('ticket', 'userid')
assignSlave('ticket', 'firstname', 'lastname')
这样,该函数就可以通过 2 个重载来识别:
过载1
超载2