Der Closure-Compiler verwendet eine Teilmenge der JSDoc annotations (und fügt ein paar seiner eigenen). Das komplette Set finden Sie unter annotation reference for the compiler. Eine JSDoc-Annotation ähnelt einer JavaDoc-Annotation und ist ein Kommentarblock, der mit /**
(zwei Sterne) beginnt. Während jede Zeile des Kommentars oft mit ihrer eigenen *
beginnt, ist das eine Konvention, die nicht erforderlich ist. Pro Zeile ist nur ein JSDoc-Tag zulässig, die Argumente für ein Tag können sich jedoch über mehrere Zeilen erstrecken.
Die Annotation gilt normalerweise für die folgende Anweisung. Hier sind einige Beispiele:
Variable
/** @type {string} */ var a;
Typ Cast
var b = /** @type {string} */ (window['foo']);
Notiz die zusätzliche Klammer
benannte Funktion
/**
* @param {string} bar
* @return {boolean}
*/
function foo(bar) { return true; }
Ausdrücke
Funktion
/** @type {function(string):boolean} */
var foo = function(bar) { return true; }
var foo2 =
/**
* @param {string} bar
* @return {boolean}
*/
function(bar) { return true; }
Typedef
Komplexe Typen (einschließlich Gewerkschaften und Datensatztypen) können für die Bequemlichkeit und Wartbarkeit mit einem typedef aliased werden. Diese Anmerkungen können lang sein, können aber zur besseren Lesbarkeit über mehrere Zeilen verteilt werden.
/** @typedef {{
* foo:string,
* bar:number,
* foobar:number|string
* }}
*/
var mytype;
Für Ihr ursprüngliches Beispiel gibt es mehrere Möglichkeiten, einen solchen Funktionsrückgabewert zu kommentieren. Eines der spezifischen und immer noch bequem ist der Satzart:
/** @return {{username:string, password:string, enabled:boolean}} */
function() {
return {
username: 'username',
password: 'password',
enabled: true
}
}
Beachten Sie die zusätzlichen {}
. Beachten Sie auch, dass Datensatztypen die Umbenennung von Eigenschaften nicht verhindern.
Diese Anmerkung teilt dem Compiler mit, dass die Funktion einen anonymen Typ mit den Eigenschaften username
, password
und enabled
zurückgibt. Andere gültige Optionen wären, eine Schnittstelle anderswo zu definieren und den Rückgabewert als diese Schnittstelle typisieren zu lassen. Die am wenigsten spezifische Annotation wäre Object
oder *
.
Um eine breite Palette möglicher Annotationen zu sehen, werfen Sie einen Blick auf die extern files in the Compiler project.
die Art Rückkehr ist 'Object'. Warum beschreiben Sie nicht einfach die Objektstruktur in ein paar Zeilen wie für einen Parameter? – jwueller
Siehe https://developers.google.com/closure/compiler/docs/js-for-compiler#types –
@elusive Ja, ich kann das immer tun, der Punkt ist, damit der Compiler Informationen hat, die funktionieren können mit, nicht nur für Menschen zu lesen. – Azder