web-dev-qa-db-fra.com

Énumérer en tant que type @param dans JSDoc

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?

25
BuZZ-dEE

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).

4
Tibos

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:

  • MyType est un nombre
  • TYPES est une énumération qui contient des valeurs MyType
  • Cette fonction accepte les énumérations qui produisent des valeurs MyType

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"
    */
26
guy mograbi

Vous pouvez y parvenir en faisant ceci:

/**
* @param {(1|2)} type
*/
function useTypesEnum(type) {

}

enter image description here

18
Ahmed Mahmoud