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]()