Sve*_*cht 10 javascript typing google-closure-compiler jsdoc
如何让我的应用程序在谷歌闭包编译器方面100%打字?
我已经使用jsdoc注释标记了所有内容.甚至可以获得100?我在64.6%
kay*_*ahr 15
有可能达到100%.我自己的项目是100%打字的.闭包编译器可以输出有关未知类型的表达式的警告.遗憾的是,没有命令行选项来启用此功能.您必须修改源代码才能启用它:
下载当前来源:
git clone https://code.google.com/p/closure-compiler/
编辑src/com/google/javascript/jscomp/CompilerOptions.java并将行更改reportUnknownTypes = CheckLevel.OFF为reportUnknownTypes = CheckLevel.WARNING
只需ant在根目录中调用即可编译闭包编译器.修改后的compiler.jar现在位于构建目录中.
当您在脚本上使用此修改后的编译器时,它会针对编译器无法确定类型的所有表达式发出大量警告.当您在代码中修复所有这些警告时,它将100%键入.
编译器有一个标志,您可以设置该标志以使未知类型输出警告.
--jscomp_warning=reportUnknownTypes
Run Code Online (Sandbox Code Playgroud)
您还需要提高警告级别.
--warning_level=VERBOSE
Run Code Online (Sandbox Code Playgroud)
我尝试编译goog.net.XhrIo作为测试:
goog.require('goog.Uri.QueryData');
goog.require('goog.debug.ErrorHandler');
goog.require('goog.net.XhrIo');
goog.net.XhrIo;
Run Code Online (Sandbox Code Playgroud)
当我编译这个时,我有这个结果:
20-nov-2010 1:12:21 com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 0 error(s), 1 warning(s), 91,5% typed
JSC_USELESS_CODE. Suspicious code. This code lacks side-effects. Is there a bug? at test.js line 5 : 0
Run Code Online (Sandbox Code Playgroud)
似乎封闭库本身并非100%打字,我认为目标不是达到100%.Javascript不是静态类型语言.Closure试图将静态类型语言的一些好处带入javascript.这很好.但这并不意味着你必须承担这种语言的负担.
我试图编译一个空文件,结果是90.4%.我认为这意味着具有所有原始函数的base.js不是100%类型的.所以我做了一些实验,发现当我还在所有局部变量上输入类型信息时,百分比会上升.我认为没有必要在所有局部变量上放置类型信息.我的意思是想象一下:
/** @type {number} */
var i = 0;
for(i = 0; i < 10; i++) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
这不是使用闭包编译器进行编译的目标.事实证明,编译base.js不会导致100%.我试着在我的开发中将这个数字保持在85%到95%之间.根据您的时间,编程风格和您正在处理的应用程序可能会有所不同.最好的指导方针是在整个应用程序开发过程中尽量保持百分比不变,无论是60%还是90%.只需根据需要进行尽可能多的打字,以使您熟悉自己的代码.
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |