63

Wie kann ich JSDoc über die Struktur eines Objekts informieren, das zurückgegeben wird. Ich habe die @return {{field1: type, field2: type, ...}} description Syntax gefunden und versuchte es:JSDoc: Rückgabeobjektstruktur

/** 
* 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}; 
} 

Während dies erfolgreich analysiert, die daraus resultierende Dokumentation einfach erklärt:

Returns: 
    The location of an event 
    Type: Object 

ich eine API entwickle und müssen die Menschen über das Objekt zu wissen, dass sie wird zurückgegeben. Ist das in JSDoc möglich? Ich benutze JSDoc3.3.0-beta1.

Antwort

106

definieren seperatly:

/** 
* @typedef {Object} Point 
* @property {number} x The X Coordinate 
* @property {number} y The Y Coordinate 
*/ 

und Verwendung:

/** 
* 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 {Point} 
*   The location of the event 
*/ 
var getEventLocation = function(e, type) { 
    ... 

    return {x: xLocation, y: yLocation}; 
} 
+2

Danke. Mehrere '@ return'-Anweisungen funktionieren zwar, aber sie werden in der Ausgabe so aufgelistet, als ob sie mehrere Returns wären (Ein Aufzählungszeichen gibt 'point-Object' an und dann zwei weitere Aufzählungszeichen für' point.x - Number' und 'point .y - Nummer'). Während ich damit leben kann, nehme ich an, dass es keine Möglichkeit gibt, eine verdichtete Ausgabe des zurückgegebenen Objekts zu haben. Oder haben Sie zumindest die Einträge für 'point.x' und' point.y' eingerückt? – BlackWolf

+0

versuchte das zweite Beispiel noch? – BGerrissen

+0

Ja, das scheint die beste Option zu sein. Ich dachte, es könnte einen Weg geben, eine nicht benannte Rückgabeeinheit zu haben, aber der '@ typedef' Ansatz ist der klarste in Bezug auf die Dokumentationsausgabe, danke! – BlackWolf

10

Eine saubere Lösung ist eine Klasse zu schreiben, und das zurück.

/** 
* @class Point 
* @type {Object} 
* @property {number} x The X-coordinate. 
* @property {number} y The Y-coordinate. 
*/ 
function Point(x, y) { 
    return { 
     x: x, 
     y: y 
    }; 
} 

/** 
* @returns {Point} The location of the event. 
*/ 
var getEventLocation = function(e, type) { 
    ... 
    return new Point(x, y); 
}; 
+0

Wenn ich dies tun, aber den Google Closure Compiler verwende, erhalte ich eine Warnung: "kann Nicht-Konstruktor nicht instanziieren". Ich habe versucht, @constructor zu der Funktion (über dem @ return) hinzuzufügen, aber es hat nicht geholfen. Wenn jemand weiß, wie das zu beheben ist, lass es mich wissen. Vielen Dank! – AndroidDev