JSDoc - 如何使用通用密钥名称记录对象?

时间:2017-07-06 11:58:50

标签: javascript ecmascript-6 documentation jsdoc

我需要使用JSDoc记录一个ES6类,它接受一个对象,该对象具有键名作为人名的属性,因此键名几乎可以是任何字符串,没有预定义。因此,对象的结构应如下所示:

{
    "Name of person": {
        "age": 31,
        "hobby": "Tennis"
    },
    "Name of another person": {
        "age": 29,
        "hobby": "Running"
    }
}

所以每个人的名字都是一个关键,但它可以是任何东西,它不是预定义的。我想要记录的一个例子:

class ExampleClass {
    /**
     * Creates an instance of ExampleClass
     * @param {Object} peopleObj            - Contains information about people.
     * @param {String} peopleObj.name       - The name of the person. <----- how should this be documented?
     * @param {Number} peopleObj.name.age   - The age of the person.
     * @param {String} peopleObj.name.hobby - The hobby of the person.
     * @memberof ExampleClass
     */
    constructor(peopleObj) {
        // Do stuff
    }
}

我觉得如果我把“peopleObj.name”表示密钥应该是“name”而不是你喜欢的任何名字。那么如何通过让用户知道他可以插入他喜欢的任何名字来记录这个?

修改

对于任何想知道的人,这就是我最终记录这个问题的方法(因为有人关闭了这个问题,所以无法将其添加为答案)。

/**
* Information about a single person.
* @typedef Person
* @type {object}
* @property {number} age   - The age of the person.
* @property {string} hobby - The hobby of the person.
*/
class ExampleClass {
    /**
     * Creates an instance of ExampleClass.
     * @param {Object.<string, Person>} peopleObj - Information about people as {@link Person}
     *                                              objects where the key is their name.
     * @memberof ExampleClass
     */
    constructor(peopleObj) {
        // Do stuff
    }
}

1 个答案:

答案 0 :(得分:1)

@type JSDoc文档中介绍了您所描述的内容。

该对象应记录如下:

/**
 * @typedef Person
 * @type {Object}
 * @property {number} age - the person's age
 * @property {string} hobby - the person's hobby
 */

/** 
 * ExampleClass
 */
class ExampleClass {

    /**
     * Creates a dictionary of people
     * @param {Object.<string, Person>} peopleObj - an object with names as keys and Person objects as values. 
     * @memberof ExampleClass
     */
     constructor(peopleObj) {}
}