以前我一直记录我的对象参数如下:
/**
* 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;