63

Как я могу рассказать JSDoc о структуре возвращаемого объекта. Я нашел синтаксис @return {{field1: type, field2: type, ...}} description и попробовал:JSDoc: Структура возвращаемого объекта

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

Хотя это разбирает успешно, результирующая документация просто заявляет:

Returns: 
    The location of an event 
    Type: Object 

Я разрабатываю API и нужно, чтобы люди знали об объекте, что они будут возвращены. Возможно ли это в JSDoc? Я использую JSDoc3.3.0-beta1.

ответ

106

Определение seperatly:

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

И использование:

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

Спасибо. Несколько операторов '@ return' действительно работают, но они перечислены в выводе, как если бы они были несколькими возвращаемыми значениями (одна точка точки указывает« точка - объект », а затем две другие точки пули для« point.x - Number »и« point .y - Number'). Хотя я могу жить с этим, я полагаю, нет никакого способа получить сжатый вывод возвращенного объекта? Или, по крайней мере, есть записи для 'point.x' и' point.y' с отступом? – BlackWolf

+0

еще попробовал второй пример? – BGerrissen

+0

Да, это действительно лучший вариант. Я думал, что может быть способ иметь неименованный возвращаемый объект, но подход '@ typedef' является наиболее понятным с точки зрения вывода документации, спасибо! – BlackWolf

10

Чистый раствор должен написать класс и вернуть это.

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

Когда я это делаю, но использую компилятор Google Closure, я получаю предупреждение: «невозможно создать экземпляр неконструктора». Я попытался добавить @constructor к функции (выше @return), но это не помогло. Если кто-то знает, как это исправить, сообщите мне. Благодаря! – AndroidDev

Смежные вопросы