【问题标题】:Modify builtin extern for closure compiler修改闭包编译器的内置外部
【发布时间】:2015-10-14 17:07:28
【问题描述】:

我正在使用 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'});
                          ^

显然,这里的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。

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

【问题讨论】:

  • 这个错误似乎已在更新版本的编译器中得到修复。

标签: javascript google-closure-compiler


【解决方案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) {};

【讨论】:

  • 啊,@suppress!我曾尝试过这样做,但没有@suppress,所以我得到了一个不同的错误。至于提交拉取请求,我很乐意这样做,但是,似乎该函数的签名不一定是一致的。一些链接来源说它是function(opt_top, opt_scrollOptions) {} 其他人只是function(opt_top) {}。我不确定谁是对的。
  • 规范只引用了一个论点——随它去吧。 FireFox 看起来是唯一支持 options 参数的主要浏览器,所以只要它在那里工作,你就可以了。
  • 嗯......刚开始尝试这个,似乎临时修复并没有抑制警告。我把它放在一个单独的文件中,并通过--externs=fix_compiler.js添加到构建命令中,但编译器仍在发出警告。
  • 只是在本地运行它,它编译没有错误。我使用document.getElementsByTagName('div')[0].scrollIntoView({'block': 'start', 'behavior': 'smooth'}); 作为我的javascript 输入。
  • 有了这个输入,闭包似乎不够聪明,无法知道它正在与一个元素一起工作(它可以在有和没有外部元素的情况下工作)。我修改为/** @type {!Element} */(document.getElementsByTagName('div')[0]).scrollIntoView({{'block': 'start', 'behavior': 'smooth'});,警告再次出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2015-07-28
  • 1970-01-01
相关资源
最近更新 更多