Wie kann man in WebStorm die Warnung vor unzähligen ungelösten Variablen bekämpfen?

Lesezeit: 4 Minuten

Benutzer-Avatar
Sergei Panfilov

Ich habe eine Funktion, die Daten vom Server übernimmt:

function getData(data){
    console.log(data.someVar);
}

WebStorm sagt das someVar ist eine nicht aufgelöste Variable. Wie kann ich solche Warnungen loswerden?

Ich sehe mehrere Möglichkeiten:

  • Warnungen in IDE-Einstellungen unterdrücken;
  • Fügen Sie eine JSON-Quelldatei mit Feldern hinzu (Einzelheiten);
  • Verwenden Sie eine Array-ähnliche Syntax: data['some_unres_var'];

Außerdem bietet mir WebStorm an, einen Namensraum für die “Daten” zu erstellen (eine Anmerkung wie /** @namespace data.some_unres_var*/), erstellen Sie ein solches Feld oder benennen Sie es um.

  • @hellboy Schnelle Antwort: Rechtsklick -> Javascript-Bibliothek verwenden -> sicherstellen, dass HTML aktiviert ist. Sehen Sie sich danach die verfügbaren Javascript-Bibliotheken in den Projekteinstellungen an, um besser zu verstehen, was vor sich geht.

    – owensmartin

    4. August 2014 um 15:30 Uhr

Benutzer-Avatar
Andreas Berheim-Brudin

Verwenden JSDoc:

/**
 * @param {{some_unres_var:string}} data
 */
function getData(data){
    console.log(data.some_unres_var);
}

  • Verwenden Sie für Variablen diese Syntax /** * @type {Object} * @property {string} sortval - value to sort by */ var a;

    – Ferenc Takacs

    1. Oktober 2015 um 12:56 Uhr


  • Wie würden Sie das machen, wenn die Funktion eine anonyme Funktion ist? wie in …….. .then(Funktion(Daten){ …. })

    – David v.

    24. Oktober 2016 um 12:00 Uhr

  • Gibt es eine ähnliche Methode, um globale Variablen zu definieren? Ich verweise auf eine externe Bibliothek in meiner Web-App, ich muss Dinge wie verwenden MediumEditoraber intellij gibt mir die berüchtigte Warnung vor ungelösten Variablen.

    – Borislemke

    9. April 2017 um 16:09 Uhr

  • @borislemke: Diese Antwort funktioniert nicht für Variablen, die keine Parameter sind. Die allgemeine Lösung ist die Verwendung von @namespace.

    – Dan Dascalescu

    21. Mai 2017 um 5:30 Uhr

Benutzer-Avatar
Bob Stein

JSDoc das Objekt. Dann seine Mitglieder.

/**
 * @param data          Information about the object.
 * @param data.member   Information about the object's members.
 */
function getData(data){
    console.log(data.member);
}
  • @property für lokale Variablen (keine Parameter).
  • Getestet in PyCharm. @Nicholi bestätigt, dass es in WebStorm funktioniert.
  • Das {{ member:type }} Die von Andreas vorgeschlagene Syntax kann mit Django-Vorlagen in Konflikt stehen.
  • Vielen Dank an Jonny Buchanans Antwort unter Berufung auf die @param-Wiki.

Dokumentieren Arrays von Objektenverwenden [] Klammern als JSDoc schlägt vor:

/**
 * @param data
 * @param data.array_member[].foo
 */

  • Was ist mit Variablen, die keine Parameter sind? Die allgemeine Lösung ist die Verwendung von @namespace.

    – Dan Dascalescu

    21. Mai 2017 um 5:30 Uhr

Alle anderen Antworten sind für den allgemeinen Fall falsch. Was ist, wenn Sie nicht bekommen data als Parameter? Sie haben dann kein JSDoc:

function niceApiCall(parameters) {
  const result = await ...  // HTTP call to the API here
  for (const e of result.entries) {
    .. // decorate each entry in the result
  }
  return result;
}

WebStorm warnt, dass “result.entries” eine nicht aufgelöste Variable (Feld) ist.

Die allgemeine Lösung besteht darin, eine hinzuzufügen @namespace Erklärung:

function niceApiCall(parameters) {
  /** @namespace result.entries **/
  const result = await ...  // HTTP call to the API here
  for (const e of result.entries) {
    .. // decorate each entry in the result
  }
  return result;
}

  • Danke für diese Lösung. Ich habe viele Attribute, die von einer API zurückgegeben werden, also müsste ich mit Ihrer Technik wahrscheinlich viele davon auflisten, um die Fehler zu vermeiden, die ich so sehe: “` /** @namespace req.headers.signaturecertchainurl / / @namespace req.headers.signature / / @namespace req.headers.slots / / @namespace req.headers.nutrientslot **/ “` Gibt es eine Möglichkeit, einen Namespace auf höherer Ebene zu erstellen (z req.headers) und ihm automatisch Kinder zuweisen? (Entschuldigung für keine Formatierung in Kommentaren!)

    – James

    24. Mai 2017 um 11:23 Uhr


  • Ist dies eine Webstorm-spezifische Lösung oder eine Editor-Standardlösung? Da bin ich mir noch unsicher…

    – phil oO

    14. Juli 2021 um 1:49 Uhr

  • @philo.O: Es ist eine JSDoc-Lösung, die WebStorm analysiert. Die Verwendung von TypeScript vermeidet dieses Problem jedoch vollständig.

    – Dan Dascalescu

    17. August 2021 um 19:36 Uhr

  • Wenn ich diese Lösung verwende, erhalte ich a Unresolved variable or type 'entries' Botschaft. Wie kann man das beheben?

    – Robin Bastian

    21. Juli um 8:13 Uhr

Destrukturierender Gebrauch, Luke.

function getData(data){
    const {member} = data;
    console.log(member);
}

Benutzer-Avatar
Lena

Verwenden einer Dummy-JS-Datei mit anonymem Funktionsausdruck, der das JSON-Literal zurückgibt, wie unter geschrieben http://devnet.jetbrains.com/message/5366907, kann eine Lösung sein. Ich kann auch vorschlagen, eine gefälschte Variable zu erstellen, die diesen JSON-Wert enthält, und diese Variable als Wert der @param-Anmerkung zu verwenden, um WebStorm mitzuteilen, was der tatsächliche Typ ist. Wie:

var jsontext = {"some_unres_var":"val"};
/** @param {jsontext} data */
function getData(data){
    console.log(data.some_unres_var);
}

Siehe auch http://devnet.jetbrains.com/message/5504337#5504337

  • Elenas Vorschlag im JetBrains-Forum ist a seltsame Lösung. Die allgemeine Lösung ist die Verwendung von @namespace.

    – Dan Dascalescu

    21. Mai 2017 um 5:38 Uhr

Um die Warnungen in der WebStorm-IDE zu entfernen, können Sie einfach die Inspektionsoptionen für Folgendes deaktivieren:

  • Ungelöste Javascript-Funktion
  • Nicht aufgelöste Javascript-Variable

p.s. Dadurch werden die Warnungen in der IDE entfernt, was meiner Meinung nach nicht die beste Idee ist, da wir eines der besten Dienstprogramme in einer IDE wie Webstorm verlieren, was die Qualität unseres Codes verschlechtern kann.

Trotzdem, wenn Sie im Menü folgen möchten: Datei > Einstellungen > Editor > Inspektionen Wir können die Javascript-Warnungen deaktivieren

Wie das folgende Bild:

Optionen deaktivieren

  • Elenas Vorschlag im JetBrains-Forum ist a seltsame Lösung. Die allgemeine Lösung ist die Verwendung von @namespace.

    – Dan Dascalescu

    21. Mai 2017 um 5:38 Uhr

1258230cookie-checkWie kann man in WebStorm die Warnung vor unzähligen ungelösten Variablen bekämpfen?

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

Privacy policy