修改闭包编译器的内置extern

Modify builtin extern for closure compiler

本文关键字:内置 extern 编译器 闭包 修改      更新时间:2023-09-26

我正在使用谷歌的闭包编译器,在构建时遇到以下错误:

path/to/file.js:...: WARNING - actual parameter 1 of Element.prototype.scrollIntoView does not match formal parameter
found   : {behavior: string, block: string}
required: (boolean|undefined)
    target.scrollIntoView({'block': 'start', 'behavior': 'smooth'});
                          ^

显然,这里的target是一个Element

看起来闭包需要一个布尔值,但mdn似乎认为对象是一个很好的参数。MDN参考https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview的定义与此一致(平滑滚动实际上在Firefox中工作)。

看起来Closure定义了w3c_css.js中的extern,它在注释中引用http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview。然而,看起来他们甚至没有正确的定义,因为w3.org在签名中有2个(可选的)参数,而闭包似乎只允许传递1个参数。

平滑滚动是一个很好的选择(我可能会在某个时候用更好的跨浏览器解决方案替换这段代码),但同时,我如何消除该警告?

永久答案

向github项目提交拉取请求并为每个人修复它:https://github.com/google/closure-compiler/blob/master/externs/browser/w3c_css.js#L2125 -如果你不喜欢这样做,我会为你做。

暂时回答

定义您自己的外部覆盖签名:

/** @externs */
/**
 * @suppress {duplicate}
 * @param {(boolean|{behavior: string, block: string})=} opt_top
 * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview
 */
Element.prototype.scrollIntoView = function(opt_top) {};