JSDoc : 객체 구조 반환


144

JSDoc에 반환되는 객체의 구조에 대해 어떻게 알 수 있습니까? @return {{field1: type, field2: type, ...}} description구문 을 찾아서 시도했습니다.

/**
 * 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을 사용하고 있습니다.


나는 이것이 @typedef해결 방법 / 솔루션 이라는 것을 알고 있지만 리터럴 객체에서 작동하지 않는 것은 이상하게 보입니다. 누군가 내가 미래 에이 문제를 우연히 발견한다면 이 페이지보다 더 많은 정보를 가질 수있는 github.com/jsdoc/jsdoc/issues/1678 문제를 추가했습니다 .
Leszek

답변:


263

@typdef를 사용 하여 구조를 별도로 정의하십시오 .

/**
 * @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 - Object및 다른 두 개의 글 머리 기호 point.x - Numberpoint.y - Number). 나는 그걸로 살 수 있지만 반환 된 객체의 요약 된 출력을 가질 방법이 없다고 생각합니까? 아니면 최소한의 항목을 가지고 point.xpoint.y들여 쓰기를?
BlackWolf

1
예, 그게 최선의 선택 인 것 같습니다. 명명되지 않은 반환 엔터티를 갖는 방법이있을 수 있다고 생각했지만 @typedef문서 출력 측면에서 가장 확실한 방법입니다. 감사합니다!
BlackWolf

두 번째 옵션이 가장 좋습니다.
BGerrissen

1
더 나은 추가 @inner또는 유형 정의는 global설명서에서 범위를 갖습니다 . +1
Onur Yıldırım 2016 년

1
나는 항상 사용했습니다 @typedef {Object} Point. 실제로이 두 줄 양식을 사용하면 PointPhpStorm에서 "해결되지 않은 변수 또는 유형 포인트"메시지가 강조 표시 됩니다. @typedef문서는 이 기능을 지원하지만, 유효한 변형 있다면 나는이 대답을 편집하고 싶지 않아요.
David Harkness

22

이미 게시 된 제안에 대한 대안으로 다음 형식을 사용할 수 있습니다.

/**
 * Get the connection state.
 *
 * @returns {Object} connection The connection state.
 * @returns {boolean} connection.isConnected Whether the authenticated user is currently connected.
 * @returns {boolean} connection.isPending Whether the authenticated user's connection is currently pending.
 * @returns {Object} connection.error The error object if an error occurred.
 * @returns {string} connection.error.message The error message.
 * @returns {string} connection.error.stack The stack trace of the error.
 */
getConnection () {
  return {
    isConnected: true,
    isPending: false,
    error
  }
}

다음과 같은 문서 출력이 제공됩니다.

    Get the connection state.

    getConnection(): Object

    Returns
    Object: connection The connection state.
    boolean: connection.isConnected Whether the authenticated user is currently connected.
    boolean: connection.isPending Whether the authenticated users connection is currently pending.
    Object: connection.error The error object if an error occurred.
    string: connection.error.message The error message.
    string: connection.error.stack The stack trace of the error.

17

깨끗한 해결책은 클래스를 작성하여 반환하는 것입니다.

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

이 작업을 수행하지만 Google Closure Compiler를 사용하면 "비 생성자를 인스턴스화 할 수 없습니다"라는 경고가 표시됩니다. @constructor를 함수 (@return 위)에 추가하려고 시도했지만 도움이되지 않았습니다. 누군가가 그 문제를 해결하는 방법을 알고 있다면 알려주십시오. 감사!
AndroidDev

2
@AndroidDev 이것은 함수 Point가 생성자 가 아니기 때문에 함수 의 본문을 다음 Point과 같이 바꾸는 것 입니다.this.x = x; this.y = y;
Feirell

1
여기서 새로운 것을 사용해야하는 이유를 보지 못하고 왜 Point (x, y)를 반환하지 않습니까?
CHANist 2009 년

@CHANist, new구문은에서 인스턴스를 만드는 것 constructor입니다. 이 없으면 new컨텍스트가 this전역 컨텍스트가됩니다. new효과를 보지 않고 인스턴스를 만들 수 있습니다 .
Akash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.