Closure 编译器认为参数不匹配是由于从未发生过的 null 条件
Closure compiler thinks a parameter is mismatched due to a null condition that never happens
我正在使用 google closure compiler to minify my code and I recently added JSDoc annotations 来允许编译器进行类型检查和更好的缩小(在高级模式下)。不幸的是,它显示警告。有没有一种方法可以更改代码以防止警告,而无需添加闭包编译器注释来抑制它?
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");
^
这是我试图缩小的 JS 代码
/**
* @param {?Date|*} date
* @returns {!boolean}
* @private
*/
function isValidDateObject(date) {
return (date instanceof Date) && !isNaN(date.getTime());
};
/**
* @param {!Date} date
* @param {!number} num
* @param {!string} unit
*/
function add(date, num, unit) {
if (unit === "second") {
date.setSeconds(date.getSeconds() + num);
}
}
/**
* @param {Date} date
* @return {Date}
*/
function addOneSecond(date) {
if (!isValidDateObject(date)) {
return date;
}
add(date, 1, "second");
return date;
}
date instanceof Date
检查应该处理日期 null
并使方法 return 为假,甚至不尝试所有 add
函数。不知道为什么 cc 认为我可以将 null
传递给 add
函数。实际代码中,isValidDateObject
用的地方多,不想内联
您可以使用闭包编译器的 online version 并将优化级别设置为 "Advanced" 来缩小我的代码。
注意:这是一个简化的示例,用于展示我收到的错误。
闭包不够智能,无法确定 isValidDateObject()
将检查并且仅 return 如果它是有效的日期对象,因此您需要提示闭包您确实传递了 Date
反对你的函数:
add(/** @type {!Date} */ (date), 1, "second");
我正在使用 google closure compiler to minify my code and I recently added JSDoc annotations 来允许编译器进行类型检查和更好的缩小(在高级模式下)。不幸的是,它显示警告。有没有一种方法可以更改代码以防止警告,而无需添加闭包编译器注释来抑制它?
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");
^
这是我试图缩小的 JS 代码
/**
* @param {?Date|*} date
* @returns {!boolean}
* @private
*/
function isValidDateObject(date) {
return (date instanceof Date) && !isNaN(date.getTime());
};
/**
* @param {!Date} date
* @param {!number} num
* @param {!string} unit
*/
function add(date, num, unit) {
if (unit === "second") {
date.setSeconds(date.getSeconds() + num);
}
}
/**
* @param {Date} date
* @return {Date}
*/
function addOneSecond(date) {
if (!isValidDateObject(date)) {
return date;
}
add(date, 1, "second");
return date;
}
date instanceof Date
检查应该处理日期 null
并使方法 return 为假,甚至不尝试所有 add
函数。不知道为什么 cc 认为我可以将 null
传递给 add
函数。实际代码中,isValidDateObject
用的地方多,不想内联
您可以使用闭包编译器的 online version 并将优化级别设置为 "Advanced" 来缩小我的代码。
注意:这是一个简化的示例,用于展示我收到的错误。
闭包不够智能,无法确定 isValidDateObject()
将检查并且仅 return 如果它是有效的日期对象,因此您需要提示闭包您确实传递了 Date
反对你的函数:
add(/** @type {!Date} */ (date), 1, "second");