Come indicare che param è facoltativo utilizzando JSDoc in linea?


119

Secondo il wiki JSDoc per @param puoi indicare che un @param è facoltativo usando

/**
    @param {String} [name]
*/
function getPerson(name) {
}

e puoi indicare un parametro inline usando

function getPerson(/**String*/ name) {
}

E posso combinarli come segue, il che funziona bene.

/**
    @param [name]
*/
function getPerson(/**String*/name) {
}

Ma vorrei sapere se c'è un modo per fare tutto in linea, se possibile.

Risposte:


123

Dalla documentazione ufficiale :

Parametro facoltativo

Un parametro opzionale denominato foo.

@param {number} [foo]
// or:
@param {number=} foo

Un parametro opzionale foo con valore predefinito 1.

@param {number} [foo=1]

7
Chiedevo come farlo in linea. L'esempio che fornisci sembra essere lo stesso di quello che ho mostrato nella mia domanda.
studgeek

67

Dopo un po 'di ricerca ho scoperto che anche questi vanno bene

/**
 * @param {MyClass|undefined}
 * @param {MyClass=}
 * @param {String} [accessLevel="author"] The user accessLevel is optional.
 * @param {String} [accessLevel] The user accessLevel is optional.
 */

Solo leggermente più accattivante visivamente di function test(/**String=*/arg) {}


9
Questi sono validi (e documentati nella guida di JSDoc), ma non sono in linea , che è quello che stavo cercando.
Studgeek

La domanda riguarda la notazione JSDoc inline. Questa è un'informazione interessante, ma non risponde alla domanda
Ken Bellows

51

Ho trovato un modo per farlo utilizzando le espressioni di tipo Google Closure Compiler . Metti un segno di uguale dopo il tipo in questo modo: function test(/**String=*/arg) {}


10
WebStorm / IntellIDEA supporta questa notazione
Peter Aron Zentai

3
Sì, quindi penso che abbia ottenuto abbastanza accettazione da contrassegnarlo come risposta.
studgeek

4
@PeterAronZentai, aggiungerò che WebStorm / IntelliIDEA lo supporta perché ho inserito una richiesta di funzionalità :). Ora supportano la maggior parte delle espressioni di tipo Google Closure Compiler, il che è fantastico.
studgeek

1
Non funziona per me per un secondo parametro opzionale.
DaveWalley

1
si prega di correggere il collegamento; conduce a una pagina 404
Chharvey

3

Nel caso in cui si utilizzino commenti di tipo inline sugli argomenti della funzione e si stia chiedendo come contrassegnare un argomento di una funzione come opzionale in quella notazione, ho scoperto che ha funzionato solo l'assegnazione di valori predefiniti agli argomenti opzionali. Se vuoi che il valore predefinito sia, undefineddevi impostarlo anche esplicitamente, altrimenti l'argomento non sarà contrassegnato come opzionale (anche se preceduto da argomenti già opzionali):

function demo(
  /** @type {String} */ mandatory,
  /** @type {Number} */ optional1 = 0,
  /** @type {Number} optional2 = undefined,
)

Se passi il mouse sul demotuo IDE dovresti vedere entrambi optional1e optional2apparire come opzionali ora. In VSCode che è indicato da ?dopo il nome dell'argomento (notazione TypeScript). Se rimuovi = undefinedda optional2te vedrai solo optional1essere opzionale, il che ovviamente non ha senso, quindi il valore predefinito qui deve essere esplicito come ho accennato nel paragrafo precedente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.