以前は、オブジェクトパラメータを次のように常に文書化していました。
/**
 * 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
}
しかし、desctructured関数パラメーターを使用するのが最善のアプローチであるかどうかはわかりません。オブジェクトを無視するか、何らかの方法で定義するか、それとも文書化するための最良の方法は何ですか?
/**
 * Description of the function
 *
 * @param {String} foo
 * @param {Boolean} [bar] - Optional value
 * @return {String}
 */
function doSomething ({ foo, bar } = {}) {
  console.log(foo, bar);
  // do something
}
上記の私のアプローチでは、関数がobject2つの異なるパラメーターではなく1つのパラメーターを期待していることが明確になっていないように感じます。
私が考えることができる別の方法はを使用すること@typedefですが、それは(特に多くのメソッドを持つより大きなファイルでは)大きな混乱になる可能性がありますか?
/**
 * @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
}
configコードで名前が付けられているか、名前がまったくないかは誰も気にしません。