Перечисление как @param введите в JSDoc

можно ли использовать перечисление для JSDoc @param объявление типа, как в следующем примере?

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

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

}

Если я использую IDE, как Eclipse и т. д. для JavaScript не должно быть предупреждения?

2 ответов


комментарии JsDoc не влияют на код JavaScript. Это влияет на некоторые инструменты, предназначенные для использования этой информации. Два из инструментов, которые работают с комментариями JsDoc, -генератор документации и компилятор закрытия Google.

Я не особенно знаком с JsDoc3, в котором добавлен тег @enum, но я бы предположил, что он работает так же, как и любой другой тип.

компилятор закрытия также распознает перечисление правильно, и вы можете используйте его так же, как вы упомянули в Примере, и получите все преимущества компилятора (например, проверка типа).


таким образом, кажется, это правильный способ документировать все без предупреждения

/**
 * @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"
    */