Wie kann man in WebStorm die Warnung vor unzähligen ungelösten Variablen bekämpfen?
Lesezeit: 4 Minuten
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.
/**
* @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
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);
}
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);
}
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:
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
12582300cookie-checkWie kann man in WebStorm die Warnung vor unzähligen ungelösten Variablen bekämpfen?yes
@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