由于从未发生过的空条件,闭包编译器认为参数不匹配

Eri*_*ric 3 javascript null types minify google-closure-compiler

我正在使用google 闭包编译器来缩小我的代码,我最近添加了JSDoc 注释以允许编译器进行类型检查和更好的缩小(在高级模式下)。不幸的是,它正在显示警告。有没有一种方法可以更改代码以防止警告,而无需添加闭包编译器注释来抑制它?

JSC_TYPE_MISMATCH: actual parameter 1 of add does not match formal parameter
found   : (Date|null)
required: Date at line 30 character 8
    add(date, 1, "second");
        ^
Run Code Online (Sandbox Code Playgroud)

这是我试图缩小的 JS 代码

JSC_TYPE_MISMATCH: actual parameter 1 of add does not match formal parameter
found   : (Date|null)
required: Date at line 30 character 8
    add(date, 1, "second");
        ^
Run Code Online (Sandbox Code Playgroud)

date instanceof Date检查应处理日期福祉null,使该方法返回FALSE,甚至没有尝试将所有的add功能。不知道为什么 cc 认为我可以传递nulladd函数。在实际代码中,isValidDateObject用在很多地方,所以我不想内联它。

您可以通过使用闭包编译器的在线版本并将优化级别设置为“高级”来缩小我的代码。

注意:这是一个简化的示例,用于展示我收到的错误。

Fra*_*erZ 5

闭包不够聪明,无法确定它isValidDateObject()是否会检查并仅在它是有效日期对象时返回,因此您需要提示闭包您确实在此时将Date对象传递给您的函数:

add(/** @type {!Date} */ (date), 1, "second");
Run Code Online (Sandbox Code Playgroud)