在@type上使用JSDoc.org的页面解释了如何记录数组和对象,而不是 对象的数组。我的函数接受一个具有特定属性列表的对象数组,这是我想要记录的这些属性。
该函数可能看起来像function foo(people)
,而people
数组可能已由函数的调用者创建为
arr = [];
arr.push({name: "Alfred", profession: "Butler", hitpoints: 2});
arr.push({name: "Batman", profession: "Vigilante", hitpoints: 42});
// ...
foo(arr)
我想使用{{name: string, profession: string, hitpoints: number}} Person
语法来记录对象,但也包含一个他们必须在数组中的概念。
请注意,底层对象(我上面称之为Person
,虽然代码不会引用任何东西)不是一个合适的类,甚至在任何地方都没有命名。我无法在任何地方定义单个“Person
”来使用@property标记。
用JSDoc3记录这种代码的这种困难可能表明组织不好,我很乐意考虑如何重组像这样的短暂对象的建议,主要用作哈希表(关联数组)。
答案 0 :(得分:4)
以下是两种方法:
/**
* @param {Array.<{name: string, profession: string, hitpoints: number}>} people The people.
*/
function foo(people) {
}
/**
* @typedef Person
* @property {string} name
* @property {string} profession
* @property {number} hitpoints
*/
/**
* @param {Array.<Person>} people The people.
*/
function foo2(people) {
}
请注意,您可以告诉jsdoc有关代码中实际不存在的内容。 @typedef
是一个很好的例子。我还使用@class
来记录@typedef
无法处理的抽象数据结构。我在文档中已经注意到这些伪类在JavaScript代码中没有任何相应的“类”。