9

我在使用jQuery-1.4.3 externs文件時特別看到了這一點。爲的javadoc讀取如何讓Closure編譯器在調用函數時停止對聯合類型的抱怨?

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

我有一個電話,看起來像這樣:

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

封抱怨: 警告 - jQueryObject.prototype.height的實際參數1找到正式的參數 不匹配:((jQueryObject | null | number)) 必需:(function(number,number):?| number | string | undefined) $('#Xobni')。height($(window).height());

從玩弄(刪除可能的返回類型),我可以看到問題是第一次調用width可能會返回一個jQueryObject,並且因爲這不是有效的輸入,所以Closure給我一個錯誤。我嘗試添加此:

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

但隨後封抱怨: 警告 - 初始化變量 發現:(jQueryObject |空|數) 要求:數量 變種W = $(窗口).WIDTH();

問題是,當寬度接受一個參數時,它返回一個jQueryObject。當它沒有參數時,它返回一個數字。所以我知道我的電話沒問題,但是javadoc並沒有完全反映,所以Closure正在警告我。有沒有一種方法來適當地修復javadocs或一種方式來告訴閉幕我知道這個結果將是一個數字。我知道我可以壓制這個錯誤,但我想知道如何更好地註釋這些東西。

感謝您的幫助!

回答

8

您可以覆蓋此如下:

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

完美運作。謝謝!它甚至可以在內聯中使用,如果我使用: $('#whatever')。width(/ ** @type {number} */$(window).width()); – 2010-10-28 05:13:01

1

試試這個:

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

或本:

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

謝謝!這實際上是我爲解決這個問題所做的,但是nullptr的帖子提供了一個不涉及任何運行時機制的很好的修復。 – 2010-10-28 05:15:06

相關問題