到目前为止,有 4 种不同的方法可以将对象记录为参数/类型。每个都有它自己的用途。但是,其中只有 3 个可用于记录返回值。
对于具有一组已知属性的对象(变体 A)
/**
 * @param {{a: number, b: string, c}} myObj description
 */
此语法非常适用于仅用作此函数的参数且不需要对每个属性进行进一步描述的对象。它可用于@returns和。
对于具有一组已知属性的对象(变体 B)
非常有用的是带有属性语法的参数:
/**
 * @param {Object} myObj description
 * @param {number} myObj.a description
 * @param {string} myObj.b description
 * @param {} myObj.c description
 */
此语法非常适用于仅用作此函数的参数且需要对每个属性进行进一步描述的对象。这不能用于@returns.
对于将在源中多个点使用的对象
在这种情况下,@typedef非常方便。您可以在源代码中的某个位置定义类型,并将其用作@param或@returns或其他可以使用类型的 JSDoc 标记的类型。
/**
 * @typedef {Object} Person
 * @property {string} name how the person is called
 * @property {number} age how many years the person lived
 */
然后你可以在@param标签中使用它:
/**
 * @param {Person} p - Description of p
 */
或者在一个@returns:
/**
 * @returns {Person} Description
 */
对于值都是相同类型的对象
/**
 * @param {Object.<string, number>} dict
 */
第一种类型(字符串)记录了键的类型,在 JavaScript 中它总是一个字符串,或者至少总是被强制转换为一个字符串。第二种类型(数字)是值的类型;这可以是任何类型。此语法也可用于@returns。
资源
可以在此处找到有关文档类型的有用信息:
https://jsdoc.app/tags-type.html
PS: 
记录您可以使用的可选值[]:
/**
 * @param {number} [opt_number] this number is optional
 */
或者:
/**
 * @param {number|undefined} opt_number this number is optional
 */