Wie erhalte ich die Closure Compiler beschwerte sich über Union-Typen zu stoppen, wenn eine Funktion aufrufen?
-
27-09-2019 - |
Frage
Ich sehe dies insbesondere dann, wenn die jQuery-1.4.3 Externe Datei. Die javadocs für das liest
/**
* @param {(string|number|function(number,number))=} arg1
* @return {(number|jQueryObject)}
* @nosideeffects
*/
jQueryObject.prototype.width = function(arg1) {};
Ich habe einen Anruf, dass sieht wie folgt aus:
var w = $(window).width();
$('#whatever').width(w)
Closure klagt: WARNUNG - Ist-Parameter 1 von jQueryObject.prototype.height nicht mit formalen Parametern gefunden: (jQueryObject | null | Nummer) erforderlich: (function (Anzahl, Nummer): |? Nummer | string | undefined) $ ( '# Xobni') Höhe ($ (Fenster) .height ());.
Von Herumspielen (die möglichen Rückgabetypen zu entfernen), kann ich sehen, dass das Problem ist, dass der erste Aufruf zur Breite möglicherweise eine jQueryObject zurückkehren kann, und da das ist keine gültige Eingabe, Closure gibt mir einen Fehler. Ich habe versucht, das Hinzufügen dieses:
/**
* @type {number}
*/
var w = $(window).width();
$('#Xobni').width(w);
Aber dann Closure klagt: WARNUNG - Initialisierung Variable gefunden: (jQueryObject | null | Nummer) erforderlich: Anzahl var w = $ (Fenster) .width ();
Das Problem ist, dass, wenn Breite ein Argument nimmt, hat es eine jQueryObject zurückgibt. Wenn es kein Argument nimmt, gibt es eine Nummer. Also ich meinen Anruf wissen, ist in Ordnung, aber die javadocs reflektieren nicht ganz so, und so Closure warnt mich. Gibt es eine Möglichkeit, die javadocs angemessen oder eine Art und Weise zu beheben, dieses Ergebnis zu sagen Schließung Ich weiß, wird eine Zahl sein. Ich weiß, ich kann wahrscheinlich den Fehler unterdrücken, aber ich würde gerne wissen, wie diese Dinge zu annotieren besser.
Danke für die Hilfe!
Lösung
Sie können dies folgendermaßen ändern:
var w = /** @type {number} */ ($(window).width());
$('#whatever').width(w)
Andere Tipps
Versuchen Sie diese:
var w = $(window).width();
w = parseInt(w.toString());
$('#whatever').width(w);
oder folgt aus:
var w = $(window).width() + '';
$('#whatever').width(w);