Перечисление как @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"
*/