la chiusura-compilatore utilizza un sottoinsieme del JSDoc annotations (e aggiunge alcune propria). Vedi lo annotation reference for the compiler per il set completo. Un'annotazione JSDoc è simile a un'annotazione JavaDoc ed è un blocco di commenti che inizia con /**
(due stelle). Mentre ogni riga del commento inizia spesso con il proprio *
, questa è una convenzione che non è richiesta. È consentito un solo tag JSDoc per riga, ma gli argomenti per un tag possono estendersi su più righe.
L'annotazione si applica in genere alla seguente dichiarazione. Ecco alcuni esempi:
variabile
/** @type {string} */ var a;
cast di tipo
var b = /** @type {string} */ (window['foo']);
nota la parentesi in più
Nominato Funzione
/**
* @param {string} bar
* @return {boolean}
*/
function foo(bar) { return true; }
Funzione espressioni
/** @type {function(string):boolean} */
var foo = function(bar) { return true; }
var foo2 =
/**
* @param {string} bar
* @return {boolean}
*/
function(bar) { return true; }
Typedef
tipi complessi (tra cui sindacati, e tipi di record) possono essere alias per convenienza e la manutenibilità utilizzando un typedef. Queste annotazioni possono essere lunghe, ma possono essere suddivise su più righe per essere leggibili.
/** @typedef {{
* foo:string,
* bar:number,
* foobar:number|string
* }}
*/
var mytype;
Per l'esempio originale, esistono diversi modi per annotare un valore di ritorno di tale funzione. Uno dei più specifico e comunque conveniente è il tipo di record:
/** @return {{username:string, password:string, enabled:boolean}} */
function() {
return {
username: 'username',
password: 'password',
enabled: true
}
}
nota l'extra {}
. Inoltre, tieni presente che i tipi di record non impediranno la ridenominazione delle proprietà.
Questa annotazione indica al compilatore che la funzione restituisce un tipo anonimo con le proprietà username
, password
e enabled
. Altre opzioni valide sarebbero definire un'interfaccia altrove e tipografare il valore restituito come tale interfaccia. L'annotazione meno specifica sarebbe Object
o *
.
Per visualizzare una vasta gamma di possibili annotazioni, dare un'occhiata allo extern files in the Compiler project.
il tipo restituito è 'Object'. Perché non descrivi semplicemente la struttura dell'oggetto in poche righe come faresti per un parametro? – jwueller
Vedere https://developers.google.com/closure/compiler/docs/js-for-compiler#types –
@elusive Sì, posso sempre farlo, il punto è consentire al compilatore di avere informazioni che può funzionare con, non solo per gli umani da leggere. – Azder