Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript静态类型检查的当前状态是什么?_Javascript_Google Closure Compiler - Fatal编程技术网

JavaScript静态类型检查的当前状态是什么?

JavaScript静态类型检查的当前状态是什么?,javascript,google-closure-compiler,Javascript,Google Closure Compiler,我知道googleclosure编译器进行类型检查,但是有没有其他选择,最好不要与库和优化器紧密耦合 如果没有,有没有办法让Google闭包编译器只做静态分析 (这里所说的静态分析,是指定义参数的类型等,如果我输入错误或传递了错误的类型,我可以运行一些东西来给我警告。)有一个,这是一个Mozilla项目,主要(至少据我所知)对JS文件进行类型检查。微软的AJAX浏览器对于需要对JS文件进行多少准备才能从中获得有用的结果,稍微放松了一些。您可以使用默认值运行它,并得到一个高度精简的文件,该文件仍然

我知道googleclosure编译器进行类型检查,但是有没有其他选择,最好不要与库和优化器紧密耦合

如果没有,有没有办法让Google闭包编译器只做静态分析


(这里所说的静态分析,是指定义参数的类型等,如果我输入错误或传递了错误的类型,我可以运行一些东西来给我警告。)

有一个,这是一个Mozilla项目,主要(至少据我所知)对JS文件进行类型检查。

微软的AJAX浏览器对于需要对JS文件进行多少准备才能从中获得有用的结果,稍微放松了一些。您可以使用默认值运行它,并得到一个高度精简的文件,该文件仍然可以使用外部代码:

但是,闭包编译器和Ajax Minifier只能进行基本linting之外的非常有限的静态分析,因为Javascript是如何设计的。访问未声明的属性可能只是检查未定义的属性,分配未声明的变量只意味着在全局范围内声明它,将对象分配给包含数字的变量是合法的,等等。在JS中有很多是合法的,而您的典型语言(Java,C#)认为是越界的,因此在不声明类型的情况下,不幸的是,对于特定编译器的边界和期望,您可以防止的错误有限


我更感兴趣的是能够在大2(微软和谷歌)之间转换的东西。它对于IDE支持、使用高级优化测试代码大小等都很有用。

我对intellij idea/webstorms编辑器非常满意,它解析jsdoc并进行自己的静态分析,以标记潜在或实际的类型安全错误。它已经被证明是非常有用的,尽管需要做一些工作才能使继承与一些通用框架一起工作。由于javascript原型继承有很多可能的方法,编译器需要比其他语言多一点的帮助


这是一个商业工具,但我可以将它用于java、php、javascript、python和ruby项目,所有这些都有一些相当不错的静态分析和重构帮助。我过去经常使用emacs并运行node.js进程来处理jshint和closure编译器,但这不那么脆弱。

这似乎很有用,但据我所知,没有办法直接从命令行运行它(例如,在构建/测试脚本中使用)。有这样的访问方式吗?我在我的一个脚本上试过,但没有用——说没用。然后在一个非常短的脚本上尝试了它,它确实起了作用,所以我不知道它是否在更大的脚本上不起作用,或者它是否有bug或者什么。它在上可用,所以你可以尝试在本地安装和运行它。我想你的做法是相反的。类型检查是编译器编译过程的一项功能。它是为了方便编译,并不是真正打算单独使用,因为它很大程度上取决于编译器的特性。然而,你不需要使用闭包库来使用编译器。我知道这就是为什么我在寻找替代品。嗯,有一种叫做闭包Linter的东西可以做你想做的…编译器做了什么,这样你就不能忽略输出文件?@luxun你的网站看起来很像我的网站。