JSDoc에서 개방형 인수 함수를 문서화하는 올바른 방법


82

다음과 같은 것이 있다고 가정 해 보겠습니다.

var someFunc = function() {
    // do something here with arguments
}

이 함수가 JSDoc에서 여러 인수를 취할 수 있다는 것을 어떻게 올바르게 문서화 할 수 있습니까? 이것이 내 최선의 추측이지만 정확한지 모르겠습니다.

/**
 * @param {Mixed} [...] Unlimited amount of optional parameters
 */
var someFunc = function() {
    // do something here with arguments
}

관련 항목 : php-가변 개수의 매개 변수를 문서화하는 방법

답변:


117

JSDoc 사양구글의 폐쇄 컴파일러는 이런 식으로 할 :

@param {...number} var_args

여기서 "number"는 예상되는 인수 유형입니다.

그러면 이것의 전체 사용법은 다음과 같습니다.

/**
* @param {...*} var_args
*/
function lookMaImVariadic(var_args) {
    // Utilize the `arguments` object here, not `var_args`.
}

추가 인수에 액세스하기 위해 활용 arguments(또는의 일부 오프셋 arguments)에 대한 주석을 참고하십시오 . var_args인수가 실제로 존재한다는 것을 IDE에 알리는 데 사용되었습니다.

ES6의 나머지 매개 변수 는 제공된 값을 포함하기 위해 실제 매개 변수를 한 단계 더 사용할 수 있으므로 더 이상 사용할 arguments필요가 없습니다 .

/**
* @param {...*} var_args
*/
function lookMaImES6Variadic(...var_args) {
    // Utilize the `var_args` array here, not `arguments`.
}

이것은 아마도 우리가 얻을 수있는 대답에 가깝습니다. :)
kflorence

2
또한 주목할 가치가있는 것은 WebStorm의 내부 JSDoc 파일 (DHTML.js 등)이 동일한 구문을 사용한다는 것입니다. 아마도 그것은 사실상의 표준 일 것입니다.
Scott Rippey

2
여기에서도 잘 설명되어 있습니다 : usejsdoc.org/tags-param.html (섹션 '매개 변수 반복 허용')
Francois

이 답변은 아드리안 홀로 바티의 답변을 통합하기 위해 편집해야합니다 :이 필요 실제 변수를 호출 할 var_args또는 유일한 매개 변수로 전화를 걸 뭐든간에. 슬픈 해킹.
Oli

1
ES6 에 나머지 매개 변수 를 추가 하면 훨씬 더 의미가 있습니다. /** @param {...Function} tasks The tasks. */ function waterfallTasks(...tasks) {나머지 매개 변수는 항상 매개 변수에 기능적으로 존재합니다.
Shibumi 2011

25

이를 수행하는 방법은 이제 JSDoc 문서에 설명 되어 있으며 Closure 문서와 같은 줄임표를 사용합니다.

@param {...<type>} <argName> <Argument description>

줄임표 뒤에 오는 유형을 제공해야하지만 a *를 사용하여 허용 되는 것을 설명하거나를 사용하여 |여러 허용되는 유형을 구분할 수 있습니다. 생성 된 문서에서 JSDoc은이 인수를 반복 가능한 것으로 설명합니다. 동일한 방식으로 선택적 인수를 선택 사항으로 설명 합니다.

내 테스트에서 실제 자바 스크립트 함수 정의에 인수를 가질 필요가 없었으므로 실제 코드는 빈 괄호, 즉 function whatever() { ... }.

단일 유형 :

@param {...number} terms Terms to multiply together

모든 유형 (아래 예에서 대괄호는 items선택 및 반복 가능으로 태그가 지정됨을 의미 함 ) :

@param {...*} [items] - zero or more items to log.

여러 유형은 유형 목록을 괄호로 묶어야하며 여는 괄호 앞에 줄임표가 있어야합니다.

@param {...(Person|string)} attendees - Meeting attendees, listed as either 
                                        String names or {@link Person} objects

1
그리고 키-값 쌍으로 사용되는 객체는 어떻습니까?. 현재 사용하고 @param {{...(key: value)}} [config] - specific configs for this transfer있지만 이것이 올바른지 궁금하십니까?
Max

@Max 그것이 공식적인 올바른 방법인지 문서에서 말할 수는 없지만 예상대로 작동하는 것 같습니다. 이 생성하는 경우 그래서, 나는 :)을 사용하십시오와 괜찮 출력
다니엘 베어드

10

로부터 JSDoc 사용자 그룹 :

공식적인 방법은 없지만 가능한 한 가지 해결책은 다음과 같습니다.

/**
 * @param [...] Zero or more child nodes. If zero then ... otherwise ....
 */

대괄호는 선택적 매개 변수를 나타내며 ...는 "임의의 숫자"를 나타냅니다.

또 다른 가능성은 이것입니다 ...

/**
 * @param [arguments] The child nodes.
 */

어느 쪽이든 당신이 의미하는 바를 전달해야합니다.

그러나 (2007) 약간 날짜가 있지만 더 최신 정보는 알지 못합니다.

매개 변수 유형을 'mixed'로 문서화해야하는 경우 {*}에서와 같이를 사용하십시오 @param {*} [arguments].


6
나는 내 대답이 반대표를 던지는 것에 신경 쓰지 않지만, 당신이 그 일을 한 이유를 설명하는 코멘트를 기대합니다. 그것이 틀렸다고 생각한다면 저와 우리 모두에게 그 이유를 알려주십시오.
hashchange

2
선택한 IDE (WebStorm 8.0.1)는 구문 # 2 @param [arguments](또는 @param {*} [arguments]그 문제에 대해)뿐만 아니라 Google Closure 컴파일러에 의해 설정된 구문 (다른 답변에서 언급 됨)을 지원합니다. @param [...]지원되지 않습니다.
mistaecko 2014

@mistaecko이지만 이름이 지정된 매개 변수 만 정확합니까? 그게 제가 사용하지 않는 것입니다. 그래서 이것은 저에게 허용되는 대답이 아닙니다 ...
Sebastian

10

나는 꽤 오랫동안 이것을 가지고 있었다. Google Closure Compiler로 수행하는 방법은 다음과 같습니다.

/**
* @param {...*} var_args
*/
function my_function(var_args) {
    // code that accesses the magic 'arguments' variable...
}

핵심은 함수가 실제로 해당 매개 변수를 사용하지 않더라도 함수에 var_args매개 변수 (또는 @param명령문 에서 호출하는 모든 것 )를 제공하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.