我想知道使用 require 和 jsdoc 从 JavaScript 模块导出枚举的规范模式。现有的示例和问题似乎只考虑本地私有枚举。我的目标是尽我所能拥有最优质的文档和智能感知/代码完成。
这是我目前最好的尝试:
var LawnMower = function () {
};
/**
* Enums for the valid heights to mow
* @readonly
* @enum {number}
*/
LawnMower.heights = {
Low: 0,
Medium: 1,
High: 2
};
// Doing this separately from above, or Visual Studio's intellisense won't recognize it as an enum :-(
LawnMower.heights = Object.freeze(LawnMower.heights);
/*
* @param {LawnMower.heights} height - The height of the deck on the mower
*/
LawnMower.prototype.mow = function (height) {};
module.exports = LawnMower;
这里有一些细节导致我采用这种方法:
- 高度是枚举。它是静态的。
- Object.freeze 似乎是最佳实践。
- 执行 LawnMower.heights = Object.freeze(...) 会阻止 Visual Studio 的智能感知工作。因此,我分两步进行。
- 添加了@readonly,虽然我认为它没有任何作用
- mow() 函数引用了 LawnMower.height,但似乎没有任何工具对它有太大作用。
我们的团队正在使用 Visual Studio、Ace+Tern 和 Atom。使用上面的模式,当我们编写这样的代码时:
var lm = new LawnMower();
lm.mow(
希望智能感知能够显示参数名称、类型和描述。如果填写“LawnMower.heights”,则可加分。为我们。(Visual Studio 为 C# 执行此操作)。
结果:
- Atom 似乎在这里完全忽略了@param。
- Visual Studio 告诉我们参数是高度,但没有提供类型或描述。
- Ace/Tern 显示高度的 @jsdoc 注释行。
具体问题:我是否正确编写了@param 行?我相信名称路径“LawnMower.heights”是指代 LawnMower 的静态成员的正确方法。
参考: