Do tej pory istnieją 4 różne sposoby dokumentowania obiektów jako parametrów / typów. Każdy ma swoje własne zastosowania. Jednak tylko 3 z nich mogą być użyte do udokumentowania wartości zwracanych.
Dla obiektów o znanym zestawie właściwości (wariant A)
/**
* @param {{a: number, b: string, c}} myObj description
*/
Ta składnia jest idealna dla obiektów, które są używane tylko jako parametry dla tej funkcji i nie wymagają dalszego opisu każdej właściwości. To może być stosowany do @returns
tak dobrze .
Dla obiektów o znanym zestawie właściwości (wariant B)
Bardzo przydatne są parametry ze składnią właściwości :
/**
* @param {Object} myObj description
* @param {number} myObj.a description
* @param {string} myObj.b description
* @param {} myObj.c description
*/
Ta składnia jest idealna dla obiektów, które są używane tylko jako parametry dla tej funkcji i które wymagają dalszego opisu każdej właściwości. Nie można tego użyć @returns
.
Dla obiektów, które będą używane w więcej niż jednym punkcie źródłowym
W tym przypadku @typedef jest bardzo przydatny. Można zdefiniować typ w jednym punkcie w źródle i użyć go jako typ dla @param
lub @returns
lub innych znaczników JSDoc, które mogą skorzystać z typu.
/**
* @typedef {Object} Person
* @property {string} name how the person is called
* @property {number} age how many years the person lived
*/
Następnie możesz użyć tego w @param
tagu:
/**
* @param {Person} p - Description of p
*/
Lub w @returns
:
/**
* @returns {Person} Description
*/
Dla obiektów, których wartości są tego samego typu
/**
* @param {Object.<string, number>} dict
*/
Pierwszy typ (ciąg znaków) dokumentuje rodzaj kluczy, które w JavaScript zawsze są ciągiem lub przynajmniej zawsze będą wymuszone na ciąg. Drugi typ (liczba) to rodzaj wartości; może to być dowolny typ. Tej składni można również użyć @returns
.
Zasoby
Przydatne informacje na temat typów dokumentacji można znaleźć tutaj:
https://jsdoc.app/tags-type.html
PS:
aby udokumentować wartość opcjonalną, możesz użyć []
:
/**
* @param {number} [opt_number] this number is optional
*/
lub:
/**
* @param {number|undefined} opt_number this number is optional
*/