9

Je le vois en particulier lors de l'utilisation du fichier externe jQuery-1.4.3. Les javadocs pour qui litComment obtenir que le compilateur de fermeture arrête de se plaindre des types d'union lors de l'appel d'une fonction?

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

J'ai un appel qui ressemble à ceci:

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

fermeture se plaint: AVERTISSEMENT - 1 paramètre réel de jQueryObject.prototype.height ne correspond pas à paramètre formel trouvé : (jQueryObject | null | number) requis: (fonction (nombre, nombre):? | nombre | chaîne | indéfini) $ ('# Xobni'). height ($ (window) .height()); De la lecture (en supprimant les types de retour possibles), je peux voir que le problème est que le premier appel à la largeur peut retourner éventuellement un jQueryObject, et puisque ce n'est pas une entrée valide, Closure me donne une erreur. J'ai essayé d'ajouter ceci:

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

Mais la fermeture se plaint: AVERTISSEMENT - Initialisation variables trouvé: (jQueryObject | null | nombre) requis: nombre var w = $ (fenêtre) .width();

Le problème est que lorsque la largeur prend un argument, elle renvoie un objet jQueryObject. Quand il ne prend pas d'argument, il renvoie un nombre. Donc, je sais que mon appel est correct, mais les javadocs ne reflètent pas tout à fait cela, et donc Closure m'avertit. Y at-il un moyen de réparer les javadocs de manière appropriée ou un moyen de dire Closure Je sais que ce résultat sera un nombre. Je sais que je peux probablement supprimer l'erreur, mais j'aimerais savoir comment annoter ces choses mieux.

Merci pour l'aide!

Répondre

8

Vous pouvez remplacer cela comme suit:

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

Cela a fonctionné parfaitement. Merci! Il fonctionne même en ligne, si j'utilise: $ ('# quelquechose'). Width (/ ** @type {number} */$ (window) .width()); –

1

Essayez ceci:

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

ou ceci:

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

Merci! C'est en fait ce que j'ai fait pour surmonter ce problème, mais la publication de nullptr fournit une solution intéressante qui n'implique aucun mécanisme d'exécution. –