44

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

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

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

}

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

4

3 回答 3

77

您可以通过执行以下操作来实现:

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

}

在此处输入图像描述

于 2019-07-29T14:17:36.730 回答
53

因此,这似乎是在没有任何警告的情况下记录所有内容的正确方法

/**
 * @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"
    */
于 2017-05-05T18:36:30.463 回答
-1

JsDoc 注释对 JavaScript 代码没有影响。它确实影响的是一些旨在使用该信息的工具。使用 JsDoc 注释的两个工具是文档生成器和 Google Closure Compiler。

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

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

于 2014-02-11T13:31:25.017 回答