[javascript] jsdoc에서“객체”인수를 설명하는 방법?
// My function does X and Y.
// @params {object} parameters An object containing the parameters
// @params {function} callback The callback function
function(parameters, callback) {
}
그러나 매개 변수 객체의 구조를 어떻게 설명합니까? 예를 들어 다음과 같아야합니다.
{
setting1 : 123, // (required, integer)
setting2 : 'asdf' // (optional, string)
}
답변
로부터 파라미터 : 위키 페이지 :
속성이있는 매개 변수
매개 변수에 특정 특성이있을 것으로 예상되는 경우 다음과 같이 해당 매개 변수의 @param 태그 바로 다음에이를 문서화 할 수 있습니다.
/**
* @param userInfo Information about the user.
* @param userInfo.name The name of the user.
* @param userInfo.email The email of the user.
*/
function logIn(userInfo) {
doLogIn(userInfo.name, userInfo.email);
}
이전에는 해당 @param 바로 뒤에 나오는 @config 태그가 있었지만 더 이상 사용되지 않는 것으로 보입니다 ( 예 : 여기 ).
답변
이제는 개체를 매개 변수 / 유형으로 문서화하는 4 가지 방법이 있습니다. 각각의 용도가 있습니다. 그러나 이들 중 3 개만 반환 값을 문서화하는 데 사용할 수 있습니다.
알려진 속성 집합이있는 객체 (Variant A)
/**
* @param {{a: number, b: string, c}} myObj description
*/
이 구문은이 함수의 매개 변수로만 사용되며 각 속성에 대한 추가 설명이 필요없는 객체에 이상적입니다. 그것은 사용할 수 있습니다 @returns
뿐만 아니라 .
알려진 속성 집합이있는 객체 (Variant B)
/**
* @param {Object} myObj description
* @param {number} myObj.a description
* @param {string} myObj.b description
* @param {} myObj.c description
*/
이 구문은이 함수의 매개 변수로만 사용되며 각 속성에 대한 추가 설명이 필요한 객체에 이상적입니다. 이 기능은 사용할 수 없습니다 @returns
.
소스에서 둘 이상의 지점에서 사용될 객체의 경우
이 경우 @typedef 는 매우 편리합니다. 소스의 한 지점에서 유형을 정의하여 유형을 사용 @param
하거나 유형을 @returns
사용할 수있는 다른 JSDoc 태그로 사용할 수 있습니다.
/**
* @typedef {Object} Person
* @property {string} name how the person is called
* @property {number} age how many years the person lived
*/
그런 다음 이것을 @param
태그 에서 사용할 수 있습니다 .
/**
* @param {Person} p - Description of p
*/
또는 @returns
:
/**
* @returns {Person} Description
*/
값이 모두 같은 유형 인 객체의 경우
/**
* @param {Object.<string, number>} dict
*/
첫 번째 유형 (문자열)은 JavaScript에서 항상 문자열이거나 최소한 문자열로 강제되는 키 유형을 문서화합니다. 두 번째 유형 (숫자)은 값의 유형입니다. 이것은 모든 유형이 될 수 있습니다. 이 구문도 사용할 수 있습니다 @returns
.
자원
문서화 유형에 대한 유용한 정보는 다음에서 찾을 수 있습니다.
https://jsdoc.app/tags-type.html
추신:
선택적 값을 문서화하려면 다음을 사용할 수 있습니다 []
.
/**
* @param {number} [opt_number] this number is optional
*/
또는:
/**
* @param {number|undefined} opt_number this number is optional
*/
답변
@return 태그에 대한 답변이 이미 있지만 자세한 내용을 알고 싶습니다.
우선, 공식 JSDoc 3 문서는 사용자 정의 객체에 대한 @return에 대한 예제를 제공하지 않습니다. https://jsdoc.app/tags-returns.html을 참조 하십시오 . 이제 어떤 표준이 나타날 때까지 우리가 무엇을 할 수 있는지 봅시다.
-
함수는 키가 동적으로 생성되는 객체를 반환합니다. 예 :
{1: 'Pete', 2: 'Mary', 3: 'John'}
. 일반적으로의 도움으로이 객체를 반복합니다for(var key in obj){...}
.https://google.github.io/styleguide/javascriptguide.xml#JsTypes 에 따라 가능한 JSDoc
/** * @return {Object.<number, string>} */ function getTmpObject() { var result = {} for (var i = 10; i >= 0; i--) { result[i * 3] = 'someValue' + i; } return result }
-
함수는 키가 알려진 상수 인 객체를 반환합니다. 예 :
{id: 1, title: 'Hello world', type: 'LEARN', children: {...}}
. 이 객체의 속성에 쉽게 액세스 할 수 있습니다object.id
.https://groups.google.com/forum/#!topic/jsdoc-users/TMvUedK9tC4 에 따른 가능한 JSDoc
-
가짜.
/** * Generate a point. * * @returns {Object} point - The point generated by the factory. * @returns {number} point.x - The x coordinate. * @returns {number} point.y - The y coordinate. */ var pointFactory = function (x, y) { return { x:x, y:y } }
-
풀 몬티.
/** @class generatedPoint @private @type {Object} @property {number} x The x coordinate. @property {number} y The y coordinate. */ function generatedPoint(x, y) { return { x:x, y:y }; } /** * Generate a point. * * @returns {generatedPoint} The point generated by the factory. */ var pointFactory = function (x, y) { return new generatedPoint(x, y); }
-
유형을 정의하십시오.
/** @typedef generatedPoint @type {Object} @property {number} x The x coordinate. @property {number} y The y coordinate. */ /** * Generate a point. * * @returns {generatedPoint} The point generated by the factory. */ var pointFactory = function (x, y) { return { x:x, y:y } }
https://google.github.io/styleguide/javascriptguide.xml#JsTypes 에 따르면
-
레코드 유형
/** * @return {{myNum: number, myObject}} * An anonymous type with the given type members. */ function getTmpObject() { return { myNum: 2, myObject: 0 || undefined || {} } }
-
답변
를 들어 @return
태그 사용 {{field1: Number, field2: String}}
을 참조하십시오 http://wiki.servoy.com/display/public/DOCS/Annotating+JavaScript+using+JSDoc
답변
매개 변수에 특정 특성이있을 것으로 예상되는 경우 추가 @param 태그를 제공하여 해당 특성을 문서화 할 수 있습니다. 예를 들어 직원 매개 변수에 이름 및 부서 속성이있을 것으로 예상되면 다음과 같이 문서화 할 수 있습니다.
/**
* Assign the project to a list of employees.
* @param {Object[]} employees - The employees who are responsible for the project.
* @param {string} employees[].name - The name of an employee.
* @param {string} employees[].department - The employee's department.
*/
function(employees) {
// ...
}
명시 적 이름없이 매개 변수가 구조화되지 않은 경우 오브젝트에 적절한 매개 변수를 제공하고 해당 특성을 문서화 할 수 있습니다.
/**
* Assign the project to an employee.
* @param {Object} employee - The employee who is responsible for the project.
* @param {string} employee.name - The name of the employee.
* @param {string} employee.department - The employee's department.
*/
Project.prototype.assign = function({ name, department }) {
// ...
};
출처 : JSDoc
답변
@config
이러한 경우에 대한 새로운 태그가 있습니다. 그것들은 앞의 것과 연결되어있다 @param
.
/** My function does X and Y.
@params {object} parameters An object containing the parameters
@config {integer} setting1 A required setting.
@config {string} [setting2] An optional setting.
@params {MyClass~FuncCallback} callback The callback function
*/
function(parameters, callback) {
// ...
};
/**
* This callback is displayed as part of the MyClass class.
* @callback MyClass~FuncCallback
* @param {number} responseCode
* @param {string} responseMessage
*/