枚举为JSDoc中的@param类型

时间:2014-02-11 13:00:53

标签: javascript ide jsdoc jsdoc3

是否可以使用enum作为JSDoc @param类型声明,如下例所示?

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

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

}

如果我使用像Eclipse等IDE这样的IDE,那么应该不会发出警告吗?

3 个答案:

答案 0 :(得分:15)

所以看来这是在没有任何警告的情况下记录所有内容的正确方法

d <- data.frame(days = seq(ymd('2017/1/1'), ymd('2017/2/1'), by = 'days'))

test <- list(
    period = list(start = ymd('2017/1/10')
    )
)

d %>% filter(days > probe$period$start)
## Here's the error

d %>% filter(days > probe$period['start'])
## This works!

这意味着:

  • MyType是一个数字
  • TYPES是一个包含MyType值的枚举
  • 此函数接受输出MyType值
  • 的枚举

在intellij 2017.1上为我工作

然而 - 这仍然允许每个字符串在没有警告的情况下传递给函数。

如果您还要指定枚举值 - 因此如果使用其他字符串会引发错误,请使用以下所述的方法:https://stackoverflow.com/a/36501659/1068746

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


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

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

}

答案 1 :(得分:12)

您可以通过执行以下操作来实现:

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

}

enter image description here

答案 2 :(得分:3)

JsDoc注释对JavaScript代码没有影响。它影响的是一些旨在使用该信息的工具。使用JsDoc注释的两个工具是the documentation generator和Google Closure Compiler。

我对JsDoc3并不是特别熟悉,其中添加了@enum标签,但我认为它可以像任何其他类型一样工作。

Closure Compiler也正确识别枚举,您可以像在示例中提到的那样使用它,并获得编译器的所有好处(例如:类型检查)。