以前我一直记录我的对象参数如下:
/** * 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 }
但我不确定最好的方法是使用结构化函数参数.我只是忽略对象,定义它不知何故或什么是最好的记录方法?
/** * Description of the function * * @param {String} foo * @param {Boolean} [bar] - Optional value * @return {String} */ function doSomething ({ foo,bar } = {}) { console.log(foo,bar); // do something }
我觉得我上面的方法并不明显,该函数期望一个对象而不是两个不同的参数.
我可以想到的另一种方式是使用@typedef,但这可能会是一个巨大的混乱(特别是在一个更大的文件中有许多方法)?
/** * @typedef {Object} doSomethingConfiguration * @property {String} foo * @property {Boolean} [bar] - Optional value */ /** * Description of the function * * @param {doSomethingConfiguration} * @return {String} */ function doSomething ({ foo,bar); // do something }
解决方法
这是它的意图,就我在
jsdoc3 repo可以找到:
/** * My cool function. * * @param {Object} obj - An object. * @param {string} obj.prop1 - Property 1. * @param {string} obj.prop2 - Property 2. */ var fn = function ({prop1,prop2}) { // Do something with prop1 and prop2 }
所以,你的第一个例子是非常正确的.
更深层次的另一个例子:
/** * 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 */ letters = ({a,b: {c}}) => a + c;