我在使用jQuery-1.4.3 externs文件时特别看到这种情况。该javadocs读取

/**
 * @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)
必填:(函数(数字,数字):? |数字|字符串|未定义)
$('#Xobni')。height($(window).height());

通过玩(删除可能的返回类型),我可以看到问题在于对width的第一次调用可能返回一个jQueryObject,并且由于这不是有效的输入,因此Closure给我一个错误。我尝试添加以下内容:
/**
 * @type {number}
 */
var w =  $(window).width();
$('#Xobni').width(w);

但随后Closure抱怨:
警告-初始化变量
找到:(jQueryObject | null | number)
必填:数字
var w = $(window).width();

问题在于,当width使用参数时,它将返回一个jQueryObject。当不带参数时,它返回一个数字。所以我知道我的电话还可以,但是javadocs并不能完全反射(reflect)出来,因此Closure向我发出警告。有没有办法适当地修复javadocs或告诉Closure我知道这个结果将是数字。我知道我可以抑制该错误,但是我想知道如何更好地注释这些内容。

谢谢您的帮助!

最佳答案

您可以按以下方式覆盖它:

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

07-24 16:49