为闭包编译器修改内置外部

Modify builtin extern for closure compiler

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

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 似乎认为 an object is a perfectly fine argument. MDN references https://drafts.csswg.org/cssom-view/#dom-element-scrollintoview 因为它的定义是一致的(平滑滚动实际上在 Firefox 中有效)。

看起来 Closure 在注释中定义了 w3c_css.js which references 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 - 如果您觉得这样做不方便,我会为您完成。

临时回答

定义你自己的 extern 覆盖签名:

/** @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) {};