2

UseJSDoc.org 的@type 页面解释了如何记录数组和对象,而不是对象数组。我的函数接受具有特定属性列表的对象数组,我想记录这些属性。

该函数可能看起来像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 记录这种代码的困难可能表明组织不好,我很乐意考虑如何重组像这样的临时对象,主要用作哈希表(关联数组)。

4

1 回答 1

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 代码中没有任何相应“类”的伪类。

于 2014-08-22T10:55:09.890 回答