¿Cómo puedo decirle a JSDoc sobre la estructura de un objeto que se devuelve? Encontré la @return {{field1: type, field2: type, ...}} description
sintaxis y la probé:
/**
* Returns a coordinate from a given mouse or touch event
* @param {TouchEvent|MouseEvent|jQuery.Event} e
* A valid mouse or touch event or a jQuery event wrapping such an
* event.
* @param {string} [type="page"]
* A string representing the type of location that should be
* returned. Can be either "page", "client" or "screen".
* @return {{x: Number, y: Number}}
* The location of the event
*/
var getEventLocation = function(e, type) {
...
return {x: xLocation, y: yLocation};
}
Si bien esto se analiza con éxito, la documentación resultante simplemente establece:
Returns:
The location of an event
Type: Object
Estoy desarrollando una API y necesito que las personas sepan sobre el objeto que recibirán. ¿Es esto posible en JSDoc? Estoy usando JSDoc3.3.0-beta1.
@typedef
es una solución / solución, pero parece extraño que esto no funcione con objetos literales. Si alguien se topa con esto en el futuro (como lo hice), he agregado un problema github.com/jsdoc/jsdoc/issues/1678 que podría tener más información que esta página.Respuestas:
Defina su estructura por separado utilizando un @typdef :
Y úsalo como el tipo de retorno:
fuente
@return
declaraciones múltiples sí funcionan, pero se enumeran en la salida como si fueran varios retornos (un punto de viñetapoint - Object
y luego otros dos puntos de viñeta parapoint.x - Number
ypoint.y - Number
). Si bien puedo vivir con eso, supongo que no hay forma de tener una salida condensada del objeto devuelto. ¿O al menos tienen las entradas parapoint.x
ypoint.y
sangrado?@typedef
enfoque es el más claro en términos de salida de documentación, ¡gracias!@inner
o escriba la definición que tendráglobal
alcance en la documentación. +1@typedef {Object} Point
. De hecho, el uso de este formulario de dos líneas resaltaPoint
en PhpStorm con el mensaje "Variable no resuelta o tipo Punto". Los@typedef
documentos admiten esto, pero no quiero editar esta respuesta si es una variante válida.Una alternativa a las sugerencias ya publicadas, puede usar este formato:
que dará la siguiente salida de documentación:
fuente
Una solución limpia es escribir una clase y devolverla.
fuente
Point
no es un constructor, para cambiar eso reemplaza el cuerpo de laPoint
función conthis.x = x; this.y = y;
new
sintaxis es crear una instancia a partir deconstructor
. Sinnew
, el contexto dethis
sería el contexto global. Puede intentar crear una instancia sinnew
ver el efecto.