Estou tendo uma função que aceita um parâmetro de string. Este parâmetro pode ter apenas um dos poucos valores possíveis definidos. Qual é a melhor maneira de documentar o mesmo? O shapeType deve ser definido como enum ou TypeDef ou algo mais?
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;
};
A segunda parte do problema é que os valores possíveis de shapeType
não são conhecidos no arquivo que define shapeType
o que você sugere. Existem vários arquivos contribuídos por vários desenvolvedores que podem adicionar aos valores possíveis de shapeType
.
PS: Estou usando jsdoc3
google-closure-compiler
google-closure
jsdoc
code-documentation
Shamasis Bhattacharya
fonte
fonte
enum
para a definição e uma união para o parâmetro função:ShapeType|string
. No entanto, enums não suportam a adição de subtipos após a declaração no compilador Closure.Respostas:
Que tal declarar um enum fictício:
Você precisa pelo menos declarar o enum para JSDOC, para isso, no entanto. Mas o código está limpo e você obtém o preenchimento automático no WebStorm.
O problema de vários arquivos, porém, não pode ser resolvido desta forma.
fonte
No final de 2014 em jsdoc3, você tem a possibilidade de escrever:
É claro que isso não será tão reutilizável quanto um enum dedicado, mas em muitos casos um enum fictício é um exagero se for usado apenas por uma função.
Veja também: https://github.com/jsdoc3/jsdoc/issues/629#issue-31314808
fonte
A respeito:
fonte
Não acho que haja uma maneira formal de escrever valores permitidos no JSDoc .
Você certamente pode escrever algo
@param {String('up'|'down'|'left'|'right')}
como o usuário b12toaster mencionado.Mas, tomando a referência de APIDocjs , aqui está o que uso para escrever valores restritos, também conhecidos como valores permitidos .
Sim, estou usando o ES6.
fonte
É assim que o Closure Compiler o suporta: você pode usar "@enum" para definir um tipo restrito. Na verdade, você não precisa definir os valores na definição de enum. Por exemplo, posso definir um tipo "inteiro" como:
Int é geralmente atribuível a "número" (é um número), mas "número" não pode ser atribuído a "Int" sem alguma coerção (um elenco).
fonte
Int
. Essa é a parte que não tenho certeza se é possível.