如何使用 JSDoc 注释记录具有属性和方法的 JavaScript 对象

How to document a JavaScript object with properties and methods with parameters using JSDoc comments

提问人:rickydickydodahgrimes 提问时间:11/2/2023 最后编辑:mplungjanrickydickydodahgrimes 更新时间:11/2/2023 访问量:78

问:

const objectname = {
    property: 0,
    set (value) {
        this.property = value;
    }
}

您将如何使用 JSDoc 注释来记录这些示例行?

这是我已经尝试过的,但它没有显示为方法,也没有显示其参数。objectName.set

/**
 * Represents an object with a property and a set method.
 * @typedef {object} ObjectName
 * @property {number} property - The numeric property of the object.
 * @property {Function} set - Sets the property value to the specified value.
 * @param {number} value - The value to set the property to.
 * @returns {void}
 */

/**
 * An instance of ObjectName.
 * @type {ObjectName}
 */
const objectName = {
    property: 0,

    /**
     * Sets the property value to the specified value.
     * @param {number} value - The value to set the property to.
     * @returns {void}
     */
    set(value) {
        this.property = value;
    }
};
JavaScript JSdoc

评论


答:

1赞 T.J. Crowder 11/2/2023 #1

我不是 JSDoc 专家,也许我太简单了,但这似乎有效:

/**
 * An object that blah blah blah...
 */
const objectname = {
    /**
     * The numeric property of the object.
     * @type number
     */
    property: 0,
    /**
     * Sets the `property` to the given value.
     * @param {number} value - The value to set the property to.
     * @returns {void}
     */
    set(value) {
        this.property = value;
    },
};

当我在 VS Code 中使用它时,我会在弹出窗口等中获取事物的类型和描述(包括参数类型 on)。set

评论

1赞 Jared Smith 11/2/2023
这是正确的方法。它丑陋而冗长,我讨厌它,但事实就是如此。它还可用于注释 TS 接口和对象类型。
0赞 rickydickydodahgrimes 11/2/2023
是的,它看起来并不令人愉悦,但它有效,你会得到一个正确的弹出窗口,这就是我想要的
0赞 rickydickydodahgrimes 11/2/2023
@JaredSmith你说它很啰嗦是什么意思,对不起,我只是不明白
0赞 Jared Smith 11/2/2023
@rickydickydodahgrimes冗长==冗长,你最终会得到比实际代码更多的注释行。但是,是的,它会在这里做你想做的事。
1赞 rickydickydodahgrimes 11/2/2023
@JaredSmith啊,我知道我一直在努力避免这种情况,但似乎没有任何其他方法可以记录可以按预期工作的对象
0赞 mplungjan 11/2/2023 #2

@param 和 @returns 标记属于 set 方法的 JSDoc 注释中,而不是 ObjectName 的 @typedef 注释中。

VSCode 如果我删除,则有效

    /**
     * An instance of ObjectName.
     * @type {ObjectName}
     */

这是更正后的版本

/**
 * Represents an object with a property and a set method.
 * @typedef {object} ObjectName
 * @property {number} property - The numeric property of the object.
 * @property {Function} set - Sets the property value to the specified value.
 */

const objectName = {
  property: 0,

  /**
   * Sets the property value to the specified value.
   * @param {number} value - The value to set the property to.
   * @returns {void}
   */
  set(value) {
    this.property = value;
  }
};

VSCode:

enter image description here

评论

1赞 rajniszp 11/2/2023
ObjectName指类型,是变量名称。我在这里看不出任何问题。在@param和@returns部分,你是对的objectName
1赞 rickydickydodahgrimes 11/2/2023
工作方式有点像我想要的,但是当使用 set 方法时,它不会显示正确的参数,我使用 VSCode 顺便说一句,只是问题的屏幕截图 imgur.com/a/IWNc17x
0赞 rickydickydodahgrimes 11/2/2023
@mplungjan 使用函数时显示参数的弹出窗口显示正确,但不适用于对象内部的方法。我也在不同的物体上尝试过,这是同样的问题。也许 VSCode 以不同的方式解释 jsDoc?
0赞 rickydickydodahgrimes 11/2/2023
是的,它适用于班级。您是否认为将我的 JavaScript 对象作为类而不是简单的对象声明会更好,即使该对象将被构造一次。对不起问了这么多问题哈哈。
0赞 mplungjan 11/2/2023
这完全取决于您的需求。我看到很多关于 jsdoc 和方法的问题。例如,请看这里 stackoverflow.com/questions/19230971/...