Wie erhalte ich die Closure Compiler beschwerte sich über Union-Typen zu stoppen, wenn eine Funktion aufrufen?

StackOverflow https://stackoverflow.com/questions/4038828

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!

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top