Korrekte Methode zum Dokumentieren von Funktionen mit offenem Argument in JSDoc

Lesezeit: 4 Minuten

Benutzer-Avatar
kflorenz

Nehmen wir an, Sie haben etwas wie das Folgende:

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

Wie würden Sie korrekt dokumentieren, dass diese Funktion eine beliebige Anzahl von Argumenten in JSDoc annehmen kann? Dies ist meine beste Vermutung, aber ich bin mir nicht sicher, ob es richtig ist.

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

Verwandt mit: php – Wie man eine variable Anzahl von Parametern dokumentiert

Benutzer-Avatar
Dawson Tot

Das JSDoc-Spezifikationen und Closure Compiler von Google mach es so:

@param {...number} var_args

Wobei “Nummer” der Typ der erwarteten Argumente ist.

Die vollständige Verwendung davon würde dann wie folgt aussehen:

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

Beachten Sie den Kommentar zur Verwendung arguments (oder ein Offset von arguments), um auf Ihre zusätzlichen Argumente zuzugreifen. var_args es hat Ihrer IDE nur signalisiert, dass das Argument tatsächlich existiert.

Restparameter in ES6 kann den realen Parameter noch einen Schritt weiter bringen, um bereitgestellte Werte zu umfassen (also keine Verwendung mehr von arguments ist notwendig):

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

  • Dies ist wahrscheinlich so nah an einer Antwort, wie wir bekommen können 🙂

    – kflorenz

    4. Februar 2011 um 0:46 Uhr

  • Erwähnenswert ist auch, dass die internen JSDoc-Dateien von WebStorm (DHTML.js usw.) dieselbe Syntax verwenden. Vielleicht ist es der De-facto-Standard.

    – Scott Rippey

    18. Juli 2012 um 20:52 Uhr

  • hier ist es auch ganz gut beschrieben: usejsdoc.org/tags-param.html (Abschnitt ‘Erlaubt die Wiederholung eines Parameters’)

    – François

    25. Juli 2014 um 21:23 Uhr


  • Diese Antwort sollte bearbeitet werden, um die Antwort von Adrian Holovaty zu integrieren: dort braucht um eine tatsächliche Variable namens zu sein var_args oder was auch immer Sie als einzigen Parameter aufrufen möchten. Trauriger Hack.

    – Ol

    13. Oktober 2015 um 1:23 Uhr

  • Mit dem Zusatz von Ruhe Parameter in ES6 macht das viel mehr Sinn. /** @param {...Function} tasks The tasks. */ function waterfallTasks(...tasks) { Restparameter haben immer eine funktionale Präsenz in den Parametern.

    – Shibumi

    11. November 2016 um 16:55 Uhr

Benutzer-Avatar
Daniel Baird

Wie das geht ist jetzt beschrieben in der JSDoc-Dokumentation und verwendet Auslassungspunkte wie die Closure-Dokumentation.

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

Sie müssen einen Typ angeben, der nach den Auslassungspunkten steht, aber Sie können a verwenden * um das Akzeptieren von irgendetwas zu beschreiben, oder verwenden Sie die | um mehrere akzeptable Typen zu trennen. In der generierten Dokumentation beschreibt JSDoc dieses Argument als wiederholbargenauso wie optionale Argumente beschrieben werden Optional.

In meinen Tests war es nicht erforderlich, ein Argument in der eigentlichen Javascript-Funktionsdefinition zu haben, sodass Ihr tatsächlicher Code nur leere Klammern haben kann, dh function whatever() { ... }.

Einzeltyp:

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

Beliebiger Typ (im Beispiel unten bedeuten die eckigen Klammern items wird sowohl als optional als auch als wiederholbar gekennzeichnet):

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

Mehrere Typen benötigen Klammern um die Typliste, mit Auslassungspunkten vor dem öffnenden Klammern:

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

  • Und was ist mit Objekten, die als Schlüssel-Wert-Paare verwendet werden? Derzeit verwende ich: @param {{...(key: value)}} [config] - specific configs for this transfer aber wollte fragen ob das so richtig ist?

    – max

    24. April 2015 um 6:36 Uhr


  • @Max Ich kann den Dokumenten nicht entnehmen, ob dies der offizielle richtige Weg ist, aber es sieht so aus, als ob es wie erwartet funktionieren sollte. Wenn es also eine Ausgabe erzeugt, mit der Sie einverstanden sind, würde ich es verwenden 🙂

    – Daniel Baird

    8. Mai 2015 um 2:22 Uhr

Von dem JSDoc-Benutzergruppe:

Es gibt keinen offiziellen Weg, aber eine mögliche Lösung ist diese:

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

Die eckigen Klammern zeigen einen optionalen Parameter an, und das … würde (für mich) “irgendeine willkürliche Zahl” anzeigen.

Eine andere Möglichkeit ist diese…

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

So oder so sollte kommunizieren, was Sie meinen.

Es ist zwar etwas älter (2007), aber mir ist nichts Aktuelleres bekannt.

Wenn Sie den Parametertyp als „gemischt“ dokumentieren müssen, verwenden Sie {*}wie in @param {*} [arguments].

  • Es macht mir nichts aus, wenn meine Antwort abgelehnt wird, aber ich erwarte einen Kommentar, der erklärt, warum Sie es getan haben (wer auch immer Sie sind). Wenn Sie der Meinung sind, dass es falsch ist, lassen Sie mich – und uns alle – wissen, warum.

    – Hashwechsel

    24. Juli 2013 um 10:29 Uhr


  • Meine bevorzugte IDE (WebStorm 8.0.1) unterstützt Syntax Nr. 2 @param [arguments] (oder @param {*} [arguments] für diese Angelegenheit) sowie die vom Google Closure-Compiler festgelegte Syntax (in einer anderen Antwort erwähnt). @param [...] wird nicht unterstützt.

    – Mistaecko

    12. April 2014 um 9:44 Uhr


  • @mistaecko aber nur mit benannten Parametern richtig? Das verwende ich nicht, daher ist dies keine akzeptable Antwort für mich …

    – Sebastian

    12. Dezember 2014 um 10:18 Uhr

Ich habe mich ziemlich lange damit herumgeschlagen. So geht’s mit dem Google Closure Compiler:

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

Der Schlüssel ist, Ihrer Funktion a zu geben var_args Parameter (oder wie auch immer Sie es in Ihrer @param -Anweisung), obwohl die Funktion diesen Parameter nicht wirklich verwendet.

1178070cookie-checkKorrekte Methode zum Dokumentieren von Funktionen mit offenem Argument in JSDoc

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy