到目前为止,有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
*/
or:
/**
* @param {number|undefined} opt_number this number is optional
*/