2014-02-11 397 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" 
    */