Wie kann angegeben werden, dass param mit Inline-JSDoc optional ist?

119

Laut dem JSDoc-Wiki für @param können Sie angeben, dass ein @param optional ist

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

und Sie können einen Parameter inline mit angeben

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

Und ich kann sie wie folgt kombinieren, was in Ordnung funktioniert.

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

Aber ich würde gerne wissen, ob es eine Möglichkeit gibt, alles möglichst inline zu erledigen.

studgeek
quelle

Antworten:

123

Aus der offiziellen Dokumentation :

Optionaler Parameter

Ein optionaler Parameter namens foo.

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

Ein optionaler Parameter foo mit dem Standardwert 1.

@param {number} [foo=1]
czerny
quelle
7
Ich habe gefragt, wie es inline geht. Das Beispiel, das Sie zur Verfügung stellen, scheint das gleiche zu sein, das ich in meiner Frage gezeigt habe.
Studgeek
67

Nach einigem Ausgraben fand ich, dass diese auch in Ordnung sind

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

Nur optisch etwas ansprechender als function test(/**String=*/arg) {}

vvMINOvv
quelle
9
Diese sind gültig (und in der JSDoc-Hilfe dokumentiert), aber sie sind nicht inline - was ich gesucht habe.
Studgeek
Die Frage bezieht sich auf die Inline-JSDoc-Notation. Dies ist eine interessante Information, beantwortet aber nicht die Frage
Ken Bellows
51

Ich habe einen Weg gefunden, dies mit Ausdrücken vom Typ Google Closure Compiler zu tun . Sie setzen ein Gleichheitszeichen nach dem Typ wie folgt: function test(/**String=*/arg) {}

studgeek
quelle
10
WebStorm / IntellIDEA unterstützt diese Notation
Peter Aron Zentai
3
Ja, ich denke, es hat genug Akzeptanz gefunden, um es als Antwort zu markieren.
Studgeek
4
@PeterAronZentai, ich werde hinzufügen, dass WebStorm / IntelliIDEA es unterstützt, weil ich eine Feature-Anfrage dafür gestellt habe :). Sie unterstützen jetzt die Mehrheit der Ausdrücke vom Typ Google Closure Compiler, was großartig ist.
Studgeek
1
Funktioniert bei mir nicht für einen optionalen zweiten Parameter.
DaveWalley
1
Bitte korrigieren Sie den Link; es führt zu einer 404 Seite
chharvey
3

Für den Fall, dass Sie Inline-Typkommentare zu Funktionsargumenten verwenden und sich fragen, wie ein Funktionsargument in dieser Notation als optional markiert werden kann, habe ich festgestellt, dass nur das Zuweisen von Standardwerten zu den optionalen Argumenten funktioniert. Wenn Sie möchten, dass der Standardwert ebenfalls undefinedexplizit festgelegt wird, wird das Argument andernfalls nicht als optional markiert (auch wenn bereits optionale Argumente vorangestellt sind):

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

Wenn Sie demoin Ihrer IDE mit der Maus darüber fahren, sollten Sie beide sehen optional1und optional2jetzt als optional angezeigt werden. In VSCode wird dies durch angezeigt? den Argumentnamen (TypeScript-Notation) . Wenn Sie entfernen = undefinedaus optional2Sie nur sehen, optional1optional ist, was natürlich Unsinn ist so hier der Standardwert muss eindeutig sein , wie ich im obigen Absatz erwähnt.

Tomáš Hübelbauer
quelle