如何在有限的可能值jsdoc中logging一个stringtypes

我有一个接受一个string参数的函数。 该参数只能有一个定义的可能值。 什么是最好的方式来logging相同的? 应该shapeType定义为枚举或TypeDef或别的东西?

Shape.prototype.create = function (shapeType) { // shapeType can be "rect", "circle" or "ellipse"... this.type = shapeType; }; Shape.prototype.getType = function (shapeType) { // shapeType can be "rect", "circle" or "ellipse"... return this.type; }; 

问题的第二部分是在定义shapeType的文件中不知道shapeType的可能值。 有几个开发人员可能会添加到shapeType的可能值的多个文件。

PS:我正在使用jsdoc3

如何声明一个虚拟枚举:

 /** * Enum string values. * @enum {string} */ Enumeration = { ONE: "The number one", TWO: "A second number" }; /** * Sample. * @param {Enumeration} a one of the enumeration values. */ Bar.prototype.sample = function(a) {}; b = new Bar(); bar.sample(Enumeration.ONE) 

尽pipe如此,您至less需要将枚举声明为JSDOC。 但代码是干净的,你会在WebStorm中自动完成。

多个文件的问题虽然不能用这种方法解决。

截至2014年底,在jsdoc3中,您可以编写:

 /** * @param {('rect'|'circle'|'ellipse')} shapeType - The allowed type of the shape */ Shape.prototype.getType = function (shapeType) { return this.type; }; 

当然,这不会像专门的枚举一样可重用,但是在很多情况下,如果仅仅由一个函数使用虚拟枚举,那么这个枚举是过度的。

另见: https : //github.com/jsdoc3/jsdoc/issues/629#issue-31314808

我不认为有写在JSDoc允许值的正式方式。

你可以像用户b12toaster一样写@param {String('up'|'down'|'left'|'right')}

在这里输入图像说明

但是,通过参考APIDocjs ,这里是我用来写约束值,又名allowedValues

 /** * Set the arrow position of the tooltip * @param {String='up','down','left','right'} position pointer position */ setPosition(position='left'){ // YOUR OWN CODE } 

噢,我正在使用ES6。

这就是Closure Compiler支持的方式:你可以使用“@enum”来定义一个受限制的types。 您实际上不必在枚举定义中定义值。 例如,我可能会定义一个“整数”types,如:

 /** @enum {number} */ var Int = {}; /** @return {Int} */ function toInt(val) { return /** @type {Int} */ (val|0); } 

Int通常可以赋值为“number”(这是一个数字),但是“number”不能赋予“Int”没有某种强制(一个强制转换)。