9

Ich sehe dies insbesondere bei der Verwendung der jQuery-1.4.3 Externs-Datei. Die javadocs für das liestWie bekomme ich den Closure Compiler, wenn er beim Aufruf einer Funktion aufhört, sich über Unionstypen zu beschweren?

/** 
* @param {(string|number|function(number,number))=} arg1 
* @return {(number|jQueryObject)} 
* @nosideeffects 
*/ 
jQueryObject.prototype.width = function(arg1) {}; 

ich einen Anruf haben, die wie folgt aussieht:

var w = $(window).width(); 
    $('#whatever').width(w) 

Schließung klagt: WARNUNG - Ist-Parameter 1 von jQueryObject.prototype.height nicht formalen Parameter passen gefunden : (jQueryObject | null | Zahl) erforderlich: (Funktion (Zahl, Nummer):? | Zahl | Zeichenkette | undefiniert) $ ('# Xobni'). height ($ (window) .height());

Durch herumspielen (Entfernen der möglichen Rückgabetypen) kann ich sehen, dass das Problem ist, dass der erste Aufruf von Breite möglicherweise ein jQueryObject zurückgeben kann, und da das keine gültige Eingabe ist, gibt Closure mir einen Fehler. Ich habe versucht, das Hinzufügen dieses:

/** 
* @type {number} 
*/ 
var w = $(window).width(); 
$('#Xobni').width(w); 

Aber dann klagt Verschluss: WARNUNG - Initialisierung Variable gefunden: (jQueryObject | null | Nummer) erforderlich: Anzahl var w = $ (Fenster) .width();

Das Problem ist, dass wenn die Breite ein Argument annimmt, es ein jQueryObject zurückgibt. Wenn es kein Argument benötigt, gibt es eine Zahl zurück. Also weiß ich, dass mein Anruf in Ordnung ist, aber die Javadocs reflektieren das nicht ganz und deshalb warnt Closure mich. Gibt es eine Möglichkeit, die Javadocs entsprechend zu korrigieren oder eine Möglichkeit, Closure mitzuteilen, dass dieses Ergebnis eine Nummer sein wird? Ich weiß, dass ich den Fehler wahrscheinlich unterdrücken kann, aber ich würde gerne wissen, wie man diese Dinge besser kommentiert.

Danke für die Hilfe!

Antwort

8

Sie können dies folgendermaßen ändern:

var w = /** @type {number} */ ($(window).width()); 
$('#whatever').width(w) 
+0

Das hat perfekt funktioniert. Vielen Dank! Es funktioniert sogar inline, wenn ich folgendes benutze: $ ('# whatever') width (/ ** @type {number} */$ (window) .width()); –

1

Versuchen Sie folgendes:

var w = $(window).width(); 
w = parseInt(w.toString()); 
$('#whatever').width(w); 

oder dies:

var w = $(window).width() + ''; 
$('#whatever').width(w); 
+0

Dank! Das ist tatsächlich, was ich getan habe, um über dieses Problem hinauszukommen, aber nullptrs Beitrag bietet eine nette Reparatur, die keinen Laufzeitmechanismus beinhaltet. –

Verwandte Themen