El Cierre compilador utiliza un subconjunto de la JSDoc annotations (y añade unos pocos de su propia). Vea el annotation reference for the compiler para el conjunto completo. Una anotación JSDoc es similar a una anotación JavaDoc y es un bloque de comentarios que comienza con /**
(dos estrellas). Si bien cada línea del comentario a menudo comienza con su propio *
, esa es una convención que no se requiere. Solo se permite una etiqueta JSDoc por línea, pero los argumentos para una etiqueta pueden abarcar varias líneas.
La anotación generalmente se aplica a la siguiente declaración. He aquí algunos ejemplos:
variable
/** @type {string} */ var a;
conversión de tipo
var b = /** @type {string} */ (window['foo']);
nota del paréntesis adicional
función llamada
/**
* @param {string} bar
* @return {boolean}
*/
function foo(bar) { return true; }
expresiones de función
/** @type {function(string):boolean} */
var foo = function(bar) { return true; }
var foo2 =
/**
* @param {string} bar
* @return {boolean}
*/
function(bar) { return true; }
typedef
tipos complejos (incluidos los sindicatos, y los tipos de registro) se pueden crear alias para mayor comodidad y facilidad de mantenimiento usando un typedef. Estas anotaciones pueden ser largas, pero se pueden dividir en varias líneas para facilitar su lectura.
/** @typedef {{
* foo:string,
* bar:number,
* foobar:number|string
* }}
*/
var mytype;
Para su ejemplo original, hay varias formas posibles de anotar dicho valor de retorno de la función. Uno de los más específicos y todavía conveniente es el tipo de registro:
/** @return {{username:string, password:string, enabled:boolean}} */
function() {
return {
username: 'username',
password: 'password',
enabled: true
}
}
Nota extra {}
. También tenga en cuenta que los tipos de registros no evitarán el cambio de nombre de propiedad.
Esta anotación le dice al compilador que la función devuelve un tipo anónimo con las propiedades username
, password
y enabled
. Otras opciones válidas serían definir una interfaz en otro lugar y encasillar el valor de retorno para que sea esa interfaz. La anotación menos específica sería Object
o *
.
Para ver una amplia gama de anotaciones posibles, eche un vistazo a extern files in the Compiler project.
el tipo de retorno es 'Object'. ¿Por qué no simplemente describes la estructura del objeto en unas pocas líneas como lo harías con un parámetro? – jwueller
Ver https://developers.google.com/closure/compiler/docs/js-for-compiler#types –
@elusive Sí, siempre puedo hacer eso, el punto es permitir que el compilador tenga información que pueda funcionar con, no solo para que los humanos lean. – Azder