Est-il possible d'utiliser une énumération pour le JSDoc @param
déclaration de type comme dans l'exemple suivant?
/**
* @enum { Number }
*/
var TYPES = {
TYPE_A: 1,
TYPE_B: 2
}
/**
* @param { TYPES } type
*/
function useTypesEnum( type ) {
}
Si j'utilise un IDE comme Eclipse etc. pour JavaScript, il ne devrait pas y avoir d'avertissement?
Les commentaires JsDoc n'ont aucun impact sur le code JavaScript. Ce que cela influence, ce sont certains outils conçus pour utiliser ces informations. Deux des outils qui fonctionnent avec les commentaires JsDoc sont le générateur de documentation et le Google Closure Compiler.
Je ne suis pas particulièrement familier avec JsDoc3, dans lequel la balise @enum a été ajoutée, mais je suppose que cela fonctionne comme n'importe quel autre type.
Le compilateur de fermeture reconnaît également correctement l'énumération et vous pouvez l'utiliser comme vous l'avez mentionné dans l'exemple et obtenir tous les avantages du compilateur (ex: vérification de type).
Il semble donc que c'est la bonne façon de tout documenter sans aucun avertissement
/**
* @typedef {number} MyType
**/
/**
* @enum {MyType}
*/
var TYPES = {
TYPE_A: 1,
TYPE_B: 2
}
/**
* @param {MyType} type
*/
function useTypesEnum( type ) {
}
Ça signifie:
Fonctionne pour moi sur intellij 2017.1
Cependant - cela permettra toujours à chaque chaîne d'être passée à la fonction sans avertissement.
Si vous souhaitez également spécifier les valeurs d'énumération - cela devrait donc générer des erreurs si une autre chaîne a été utilisée, utilisez la méthode décrite à: 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"
*/