これまで、私は常にオブジェクト パラメータを次のように文書化していました。
/**
* 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
}
object
上記のアプローチでは、関数が2 つの異なるパラメータではなく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
}
ベストアンサー1
これは、ドキュメンテーション。
/**
* 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
}
つまり、最初の例はほぼ正しいということです。
ネストがさらに深い別の例:
/**
* 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;