Google Closure Compiler强制从EventTarget到Node

时间:2014-04-16 00:38:48

标签: javascript google-closure

我正在尝试编译我的程序,该程序在图像上有一个click事件监听器,我正在检查是否发生了某个特定元素或其他元素上的点击。

function(e){
    var img_wrapper = goog.dom.getElementsByClass('imgWrapper');
    if (img_wrapper.length > 0 &&  goog.dom.findCommonAncestor(e.target, img_wrapper[0]) === img_wrapper[0]){
        return;
    }
}

编译时,我收到此错误:

flickr_closure.js:226: WARNING - actual parameter 1 of goog.dom.findCommonAncestor does not match formal parameter
found   : (EventTarget|null)
required: (Node|null|undefined)
  if (img_wrapper.length > 0 &&  goog.dom.findCommonAncestor(e.target, img_wrapper[0]) === img_wrapper[0]){
                                                         ^

0 error(s), 1 warning(s), 97.0% typed

代码就像我想要的那样工作,但我仍然得到了警告,因为这是为了学校作业,其中一个要求就是我在编译时不会有警告。

我尝试为e.target添加一些基本类型信息,试图告诉编译器将其视为一个节点,但它也抱怨这一点。

2 个答案:

答案 0 :(得分:3)

使用所谓的type-casting

/** @type {Node} */ (e.target)

e.g。

goog.dom.findCommonAncestor(/** @type {Node} */ (e.target), img_wrapper[0])

答案 1 :(得分:2)

扩展Alex's answer,最好在实际检查变量后进行输入。

if(goog.dom.isElement(e.target)) {
  .... /** @type {!Element} */ (e.target) ....
}