【问题标题】:How do I get the Closure Compiler to stop complaining about union types when calling a function?如何让闭包编译器在调用函数时停止抱怨联合类型?
【发布时间】:2010-10-28 00:38:05
【问题描述】:

我在使用 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 并没有完全反映这一点,所以 Closure 警告我。有没有办法适当地修复 javadocs 或者告诉 Closure 我知道这个结果将是一个数字。我知道我可能可以抑制错误,但我想知道如何更好地注释这些内容。

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 效果很好。谢谢!如果我使用它甚至可以内联: $('#whatever').width(/** @type {number} */ $(window).width());
    【解决方案2】:

    试试这个:

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

    或者这个:

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

    【讨论】:

    • 谢谢!这实际上是我为解决这个问题所做的,但 nullptr 的帖子提供了一个很好的修复,它不涉及任何运行时机制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2017-12-29
    相关资源
    最近更新 更多