Search code examples
javascriptjsdoc

Document overload functions/methods


I've been trying to document an overload function in JS using JSDoc:

There's 2 use cases:

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

I'd like to have it look like this in VSCode:

  • Case 1

    Case 1

  • Case 2

    Case 2

And so on...

I tried the solution given in Document overloaded function in JSDoc but it didn't work for me:

/**
 * 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()

I get this:

this

Is there a way to achieve what I'm trying to do?

I read this article but am not sure how it works in my case.


Solution

  • Do it like the following snippet. Change from function to an arrow function and set its type accordingly. The last thing is to assign a default value to trailing arguments so the overload types are compatible with each other.

    /**
     * @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')
    

    This way the function is recognized with 2 overloads:

    Overload 1

    Overload 1

    Overload 2

    Overload 2