在JavaScript模块中导出枚举的规范模式是什么?

时间:2015-09-17 15:29:58

标签: javascript enums jsdoc3

我想知道使用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;

这里有一些细节让我采用这种方法:

  1. 高度是枚举。它是静态的。
  2. Object.freeze似乎是最佳做法。
  3. 使用LawnMower.heights = Object.freeze(...)可防止Visual Studio的智能感知工作。因此,我分两步完成。
  4. 添加@readonly,虽然我认为它没有做任何事情
  5. mow()函数引用了LawnMower.height,但没有一个工具似乎对它做了很多。
  6. 我们的团队正在使用Visual Studio,Ace + Tern和Atom。使用上面的模式,当我们编写这样的代码时:

    var lm = new LawnMower();
    lm.mow(
    

    希望intellisense将显示参数名称,类型和描述。如果它填写“LawnMower.heights”,则可获得奖励积分。为了我们。 (Visual Studio为C#执行此操作)。

    结果:

    • Atom似乎完全忽略了@param。
    • Visual Studio告诉我们参数是高度但不提供类型或描述。
    • Ace / Tern显示@jsdoc注释行的高度。

    具体问题: 我是否正确地写了@param线?我相信名称路径“LawnMower.heights”是引用LawnMower静态成员的正确方法。

    参考文献:

    1. How to document a string type in jsdoc with limited possible values
    2. Enum as @param type in JSDoc
    3. How to document a parameter that accepts a predefined set of values?
    4. http://usejsdoc.org/tags-enum.html
    5. http://usejsdoc.org/about-namepaths.html

0 个答案:

没有答案