2014-02-11 10 views
7

Ist es möglich, eine Enum für die JSDoc @param Deklaration wie im folgenden Beispiel zu verwenden?Enum als @param type in JSDoc

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

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

} 

Wenn ich eine IDE wie Eclipse etc. für JavaScript verwende, sollte keine Warnung ausgegeben werden?

+0

Haben Sie versucht? Was ist passiert? – Xotic750

+0

Ja, aber nur in [jsfiddle] (http://jsfiddle.net/#&togetherjs=fI19CN5hhH). Es funktioniert, auch wenn ich "TYPES" für "@ param" verwende. –

+0

Haben Sie das jemals gelöst? –

Antwort

3

JsDoc-Kommentare haben keinen Einfluss auf JavaScript-Code. Was es beeinflusst, sind einige Tools, die diese Informationen nutzen sollen. Zwei der Tools, die mit JsDoc-Kommentaren arbeiten, sind the documentation generator und der Google Closure-Compiler.

Ich bin nicht besonders vertraut mit JsDoc3, in denen das @ enum-Tag hinzugefügt wurde, aber ich würde annehmen, dass es wie jeder andere Typ funktioniert.

Der Closure Compiler erkennt das Enum auch korrekt und Sie können es wie im Beispiel beschrieben verwenden und alle Vorteile des Compilers nutzen (zB Typprüfung).

+0

Nein, es werden keine Links zu dieser Enumeration erstellt, sondern nur typedefs. – xamiro

4

So scheint es, dies der richtige Weg ist alles ohne Vorwarnung zu dokumentieren

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


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

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

} 

Das bedeutet:

  • MyType eine Zahl
  • TYPEN eine Enumeration ist, die MyType
  • Werte hält
  • Diese Funktion akzeptiert Enums, die MyType-Werte ausgeben

Funktioniert für mich auf intellij 2017.1

Allerdings - dies wird weiterhin zulassen, dass jeder String ohne Warnung an die Funktion übergeben wird.

Wenn Sie die ENUM-Werte bestimmen wollen - so sollte es Fehler auslösen, wenn eine andere Zeichenfolge verwendet wurde, verwenden Sie die Methode beschrieben unter: 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" 
    */