JSDoc

时间:2016-04-28 13:52:54

标签: arguments ecmascript-6 jsdoc destructuring

以前我总是将对象参数记录如下:

/**
 * 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
}

我觉得我上面的方法并没有明确表明函数需要object而不是两个不同的参数。

我能想到的另一种方法是使用@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
}

3 个答案:

答案 0 :(得分:32)

这就是它的用途,如documentation中所述。

/**
 * 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;

答案 1 :(得分:0)

我个人使用这个:

/**
* @param {{
  a: number
  b: number
}} param0
* @returns {number} The sum
*/
const func = ({ a, b }) => a + b;

只需在此处创建对象即可。

I also take advantage of TypeScript,并将bb?声明为JSDoc also allows unions

答案 2 :(得分:-8)

请参阅JSDoc's "Documenting a parameter's properties"

/**
 * Assign the project to an employee.
 * @param {Object} employee - The employee who is responsible for the project.
 * @param {string} employee.name - The name of the employee.
 * @param {string} employee.department - The employee's department.
 */
Project.prototype.assign = function(employee) {
    // ...
};

Google Closure compiler type checking,基于但是从JSDoc转移,也允许@param {{x:number,y:number}} point A "point-shaped" object.