在调用函数时,如何让Closure Compiler停止抱怨union类型?

时间:2010-10-28 00:38:06

标签: javascript javadoc google-closure google-closure-compiler

我在使用jQuery-1.4.3 externs文件时特别看到了这一点。其中的javadoc读取

/**
 * @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) 必需:(函数(数字,数字):?| number | string | undefined)         $( '#Xobni的')的高度($(窗口).height());

从播放(删除可能的返回类型),我可以看到问题是第一次调用width可能返回一个jQueryObject,因为那不是一个有效的输入,Closure给了我一个错误。我尝试添加这个:

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

然后Closure抱怨: 警告 - 初始化变量 发现:(jQueryObject | null | number) 要求:数量         var w = $(window).width();

问题是当width接受一个参数时,它会返回一个jQueryObject。当它不参数时,它返回一个数字。所以我知道我的电话没问题,但javadocs并没有完全反映出来,因此Closure警告我。有没有办法适当地修复javadoc或告诉Closure我知道这个结果将是一个数字。我知道我可以抑制错误,但我想知道如何更好地注释这些东西。

感谢您的帮助!

2 个答案:

答案 0 :(得分:8)

您可以按如下方式覆盖:

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

答案 1 :(得分:2)

试试这个:

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

或者这个:

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