忽略Google Closure中一个文件的编译器警告

def*_*rex 6 javascript google-closure google-closure-library google-closure-compiler

我在一个相当大的Closure项目中使用外部库(Phonegap).不幸的是,Phonegap生成了一个吨编译器警告(所有"危险使用此").足够它使搜索编译器输出警告我自己的代码非常烦人.

有没有办法让一个文件中的警告静音?

Ste*_*ung 8

我猜你的意思是在使用VERBOSE或checkTypes时键入警告.

将以下内容放入任何文件中:

/**
 * @fileoverview
 * @suppress {checkTypes}
 */
Run Code Online (Sandbox Code Playgroud)

关闭该文件的类型检查.你还可以做@suppress很多其他的事情.阅读Closure Compiler文档以获取更多详细信息.

危险使用"这个"

但是,如果您正在谈论"危险使用此"警告,请不要忽视它们.他们指的地方:

  1. 你有一个命名空间
  2. 您在该命名空间中定义了一个函数
  3. 你在该函数中使用"this" - 这可以引用命名空间
  4. 该命名空间可能会被编译器弄平

例如:

foo.bar.hello = "Hello World!";
foo.bar.baz = function() {
   alert(this.hello);
};
foo.bar.baz();    // this --> foo.bar
Run Code Online (Sandbox Code Playgroud)

"警报"声明将由编译器警告"危险使用此"进行标记.为什么?请记住,如果编译器展 "foo.bar"命名空间:

$foo$bar$hello$ = "Hello World!";
$foo$bar$baz$ = function() { alert(this.$hello$); }
$foo$bar$baz$();   // this --> window
Run Code Online (Sandbox Code Playgroud)

注意我在这里使用调试变量重命名.实际上,"$ foo $ bar $ baz"可能只是重命名为"a".

您可以立即看到调用foo.bar.baz()将失败,因为"this"不再引用"foo.bar",而是引用全局对象.您的代码会因响亮的CRANK而崩溃!

"这个"没问题的例外情况

现在,有些情况下使用"this"即可.例如,在事件处理程序中."this"将自动指向引发该事件的DOM节点.

在这些情况下,您需要使用以下类型的JsDoc指令:

/** @this {Node} */
Run Code Online (Sandbox Code Playgroud)

指定"this"的预期类型以关闭编译器.