63

Làm cách nào tôi có thể cho JSDoc biết về cấu trúc của đối tượng được trả về. Tôi đã tìm thấy cú pháp @return {{field1: type, field2: type, ...}} description và thử nó:JSDoc: Cấu trúc đối tượng trả về

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

Trong khi điều này phân tích thành công, các tài liệu hướng dẫn đơn giản rằng:

Returns: 
    The location of an event 
    Type: Object 

Tôi đang phát triển một API và cần mọi người biết về những đối tượng mà họ sẽ được trả lại. Điều này có thể xảy ra trong JSDoc không? Tôi đang sử dụng JSDoc3.3.0-beta1.

Trả lời

106

Xác định seperatly:

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

Và sử dụng:

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

Cảm ơn. Nhiều câu lệnh '@ return' thực sự hoạt động, nhưng chúng được liệt kê trong đầu ra như thể chúng là một số trả về (Một điểm bullet ghi' điểm - Đối tượng' và sau đó là hai dấu đầu dòng khác cho 'điểm.x - Số' và' điểm .y - Số'). Trong khi tôi có thể sống với điều đó, tôi cho rằng không có cách nào để có một đầu ra ngưng tụ của vật thể được trả về? Hoặc ít nhất có các mục nhập cho 'point.x' và' point.y' thụt lề? – BlackWolf

+0

đã thử ví dụ thứ hai chưa? – BGerrissen

+0

Có, điều đó dường như là lựa chọn tốt nhất. Tôi nghĩ rằng có thể có một cách để có một thực thể trả về không được đặt tên, nhưng cách tiếp cận '@ typedef' là cách rõ ràng nhất về đầu ra tài liệu, cảm ơn! – BlackWolf

10

Một giải pháp sạch là viết một lớp học và trở về đó.

/** 
* @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

Khi tôi làm điều này nhưng sử dụng trình biên dịch đóng cửa của Google, tôi nhận được một cảnh báo: "không thể khởi tạo non-constructor". Tôi đã thử thêm @constructor vào hàm (phía trên @return) nhưng nó không giúp được gì. Nếu ai đó biết cách sửa lỗi đó, hãy cho tôi biết. Cảm ơn! – AndroidDev

Các vấn đề liên quan