文档重载函数/方法

问题描述 投票:0回答:2

我一直在尝试使用 JSDoc 记录 JS 中的重载函数:

有 2 个用例:

assignSlave(ticket, userid);
assignSlave(ticket, firstname, lastname);

我希望它在 VSCode 中看起来像这样:

  • 案例1

    Case 1

  • 案例2

    Case 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()

我明白了:

this

有办法实现我想要做的事情吗?

我读了这篇文章,但不确定它在我的情况下是如何工作的。

javascript jsdoc
2个回答
6
投票

在 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


2
投票

像下面的代码片段那样做。从

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

© www.soinside.com 2019 - 2024. All rights reserved.