Enum как тип @param в JSDoc

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

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

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

}

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

Ответ 1

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

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

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

Ответ 2

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

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


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

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

}

Это означает:

  • MyType - это число
  • TYPES - это перечисление, которое содержит значения MyType
  • Эта функция принимает перечисления, которые выводят значения MyType

Работает для меня на сайте 2017.1

Однако - это все равно позволит передать каждую строку в функцию без предупреждений.

Если вы также хотите указать значения перечисления - поэтому он должен поднять ошибки, если используется другая строка, используйте метод, описанный по адресу: fooobar.com/questions/809728/...

 /**
    * @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) {

}

enter image description here