Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Document destructured function parameter in JSDoc

Previously I've always documented my object parameters as follows:

/**  * Description of the function  *  * @param {Object} config - The configuration  * @param {String} config.foo  * @param {Boolean} [config.bar] - Optional value  * @return {String}  */ function doSomething (config = {}) {   const { foo, bar } = config;   console.log(foo, bar);   // do something } 

But I am unsure what the best approach is with desctructured function parameter. Do I just ignore the object, define it somehow or what is the best way of documenting it?

/**  * Description of the function  *  * @param {String} foo  * @param {Boolean} [bar] - Optional value  * @return {String}  */ function doSomething ({ foo, bar } = {}) {   console.log(foo, bar);   // do something } 

I feel like my approach above doesn't make it obvious that the function expects an object and not two different parameter.

Another way I could think of would be using @typedef, but that might end up being a huge mess (especially in a larger file with many methods)?

/**  * @typedef {Object} doSomethingConfiguration  * @property {String} foo  * @property {Boolean} [bar] - Optional value  */  /**  * Description of the function  *  * @param {doSomethingConfiguration}  * @return {String}  */ function doSomething ({ foo, bar } = {}) {   console.log(foo, bar);   // do something } 
like image 829
morkro Avatar asked Apr 28 '16 13:04

morkro


1 Answers

This is how it's intended, as described in the documentation.

/**  * My cool function.  *  * @param {Object} obj - An object.  * @param {string} obj.prop1 - Property 1.  * @param {string} obj.prop2 - Property 2.  */ const fn = function ({prop1, prop2}) {   // Do something with prop1 and prop2 } 

So, your first example is pretty much correct.

Another example with some deeper nesting:

/**  * Nesting example.  *  * @param {object} param  * @param {number} param.a - First value  * @param {object} param.b - Wrapper  * @param {number} param.b.c - Second value  * @return {number} sum a and b  */ const letters = ({a, b: {c}}) => a + c; 
like image 144
Cerbrus Avatar answered Sep 28 '22 01:09

Cerbrus