gpt4 book ai didi

javascript - Closure 编译器认为参数不匹配是由于从未发生过的 null 条件

转载 作者:行者123 更新时间:2023-11-29 10:02:25 25 4
gpt4 key购买 nike

我正在使用 google closure compiler缩小我的代码,我最近添加了 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 检查应该处理 date 为 null 并使方法返回 false,甚至不尝试所有 add 函数。不知道为什么 cc 认为我可以将 null 传递给 add 函数。在实际代码中,isValidDateObject 被用在很多地方,所以我不想内联它。

您可以使用 online version 缩小我的代码闭包编译器并将优化级别设置为“高级”。

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

最佳答案

闭包不够智能,无法确定 isValidDateObject() 将检查并仅在它是有效日期对象时返回,因此您需要向闭包提示您确实传递了一个 Date 在那个时候反对你的函数:

add(/** @type {!Date} */ (date), 1, "second");

关于javascript - Closure 编译器认为参数不匹配是由于从未发生过的 null 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52865665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com