修改内置extern以用于闭包编译器

时间:2015-10-14 17:07:29

标签: javascript google-closure-compiler

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

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'});
                          ^

显然,此处targetElement

好的,所以看起来闭包想要一个布尔值,但是mdn似乎认为an object is a perfectly fine argument。 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。

平滑滚动是一个不错的选择(我可能会在某些时候使用更好的跨浏览器解决方案替换这段代码),但与此同时,我如何沉默警告?

1 个答案:

答案 0 :(得分: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) {};