Martin
Martin

Reputation: 63

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:

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.

Upvotes: 6

Views: 1606

Answers (2)

Tomasz Lenarcik
Tomasz Lenarcik

Reputation: 4880

In TypeScript 5, you can use the new @overload tag:

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

For reference: https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#overload-support-in-jsdoc

Upvotes: 9

lepsch
lepsch

Reputation: 10319

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

Upvotes: 3

Related Questions