2014-02-11 67 views
7

是否可以像下例中那樣使用JSDoc @param類型聲明的枚舉?在JSDoc中使用@param類型枚舉

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

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

} 

如果我使用JavaScript等Eclipse的IDE的JavaScript,應該不會提出警告?

+0

你試試?發生了什麼? – Xotic750

+0

是的,但僅限於[jsfiddle](http://jsfiddle.net/#&togetherjs=fI19CN5hhH)。它可以工作,如果我使用'TYPESSS'作爲'@ param'。 –

+0

你有沒有解決過這個問題? –

回答

3

JsDoc評論對JavaScript代碼沒有影響。它所影響的是一些旨在使用該信息的工具。與JsDoc評論一起工作的兩個工具是the documentation generator和Google Closure編譯器。

我對JsDoc3並不是特別熟悉,其中已經添加了@enum標記,但我會認爲它的工作方式與任何其他類型一樣。

Closure編譯器也能正確識別枚舉,你可以像使用例子中提到的那樣使用它,並獲得編譯器的所有好處(例如:類型檢查)。

+0

不,它不會創建指向該枚舉的鏈接,僅用於typedefs。 – xamiro

4

如此看來,這是沒有任何警告記錄一切正確的方式

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


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

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

} 

這意味着:

  • 的MyType是一個數字
  • 類型是保存的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" 
    */