【问题标题】:Enum as @param type in JSDoc枚举作为 JSDoc 中的 @param 类型
【发布时间】:2014-03-09 06:44:03
【问题描述】:

是否可以像下面的示例一样为 JSDoc @param 类型声明使用枚举?

/**
 * @enum { Number }
 */
var TYPES = {
    TYPE_A: 1,
    TYPE_B: 2
}

/**
 * @param { TYPES } type
 */
function useTypesEnum( type ) {

}

如果我为 JavaScript 使用 Eclipse 等 IDE,应该不会发出警告吗?

【问题讨论】:

  • 你试过了吗?发生了什么?
  • 是的,但仅限于jsfiddle。如果我将TYPESSS 用于@param,它也可以工作。
  • 你解决过这个问题吗?

标签: javascript ide jsdoc jsdoc3


【解决方案1】:

JsDoc cmets 对 JavaScript 代码没有影响。它确实影响的是一些旨在使用该信息的工具。与 JsDoc cmets 一起使用的两个工具是 the documentation generator 和 Google Closure Compiler。

我对 JsDoc3 不是特别熟悉,其中添加了 @enum 标记,但我认为它与任何其他类型一样工作。

闭包编译器也能正确识别枚举,您可以像示例中提到的那样使用它并获得编译器的所有好处(例如:类型检查)。

【讨论】:

  • 不,它不会创建指向该枚举的链接,只会创建类型定义的链接。
  • 我看不出请求者如何推断 cmets 会影响代码,相反,他们想知道如何影响其 IDE 的类型提示逻辑。他们似乎要求的是是否可以在 jsdoc 中识别枚举,如果可以,语法是什么,您的回答似乎没有帮助。我承认他们的问题可以说得更好。
【解决方案2】:

看来这是在没有任何警告的情况下记录所有内容的正确方法

/**
 * @typedef {number} MyType
 **/


/**
 * @enum {MyType}
 */
var TYPES = {
    TYPE_A: 1,
    TYPE_B: 2
}

/**
 * @param {MyType} type
 */
function useTypesEnum( type ) {

}

这意味着:

  • MyType 是一个数字
  • TYPES 是一个包含 MyType 值的枚举
  • 此函数接受输出 MyType 值的枚举

在 intellij 2017.1 上为我工作

但是 - 这仍然允许将每个字符串传递给函数而不会发出警告。

如果您也想指定枚举值 - 因此如果使用另一个字符串会引发错误,请使用以下描述的方法:https://stackoverflow.com/a/36501659/1068746

 /**
    * @typedef FieldType
    * @property {string} Text "text"
    * @property {string} Date "date"
    * @property {string} DateTime "datetime"
    * @property {string} Number "number"
    * @property {string} Currency "currency"
    * @property {string} CheckBox "checkbox"
    * @property {string} ComboBox "combobox"
    * @property {string} Dropdownlist "dropdownlist"
    * @property {string} Label "label"
    * @property {string} TextArea "textarea"
    * @property {string} JsonEditor "jsoneditor"
    * @property {string} NoteEditor "noteeditor"
    * @property {string} ScriptEditor "scripteditor"
    * @property {string} SqlEditor "sqleditor"
    */

【讨论】:

    【解决方案3】:

    您可以这样做:

    /**
    * @param {(1|2)} type
    */
    function useTypesEnum(type) {
    
    }
    

    【讨论】:

    • 非常感谢,这是我一直在寻找的,应该是公认的答案
    • Leuan,我无法告诉你你是如何度过我的一天的!
    • 可以和@typedef结合吗?
    • @jakubiszon,是的。只需将 (1|2) 替换为您的自定义类型
    • @AhmedMahmoud 我可以看看这个例子吗?当我做/** @typedef {(1|2)} testEnum */ 时,VSCode 似乎没有捡起它当我引用它时,它知道类型是testEnum,但它没有建议值。
    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多