javascript google-closure-compiler

¿Cuál es el estado actual de la comprobación de tipos estáticos de JavaScript?



google-closure-compiler (3)

Sé que Google Closure Compiler realiza la comprobación de tipos, pero ¿existen alternativas, preferiblemente que no estén tan estrechamente relacionadas con una biblioteca y un optimizador?

Si no es así, ¿hay alguna forma de que el compilador de cierre de Google solo realice análisis estáticos?

(Por análisis estático aquí, me refiero a cosas como la definición de tipos para argumentos, etc., que puedo ejecutar para advertirme si hago un error tipográfico o el tipo incorrecto)


El AJAX Minifier de Microsoft es un poco más relajado con respecto a la cantidad de preparación que debe hacer en un archivo JS para obtener resultados útiles. Puede ejecutarlo con valores predeterminados y obtener un archivo altamente reducido que aún funcione con código externo: http://ajaxmin.codeplex.com/

Sin embargo, tanto Closure Compiler como Ajax Minifier solo pueden realizar análisis estáticos muy limitados más allá de la alineación básica, debido a la forma en que se ha diseñado Javascript. El acceso a una propiedad no declarada puede ser simplemente verificar si no está definido, asignar una variable no declarada simplemente significa declararla en el ámbito global, asignar un objeto a una variable que contenga un número es legal, etc. (Java, C #) considera fuera de límites, por lo que, sin declarar tipos, límites y expectativas para un compilador específico, lamentablemente estará limitado en los errores que puede evitar.

Estaría un poco más interesado en algo que pueda transformarse entre los 2 grandes (MS y Google). Sería útil para el soporte de IDE, probar el tamaño del código con optimizaciones avanzadas, etc.


Está el Doctor JS , que es un proyecto de Mozilla que principalmente (como yo lo entiendo) hace una comprobación de tipos para JS.


Estoy muy contento con el editor intellij idea / webstorms, que analiza jsdoc y realiza su propio análisis estático para identificar posibles errores de seguridad de tipo o reales. Ha demostrado ser muy útil, aunque se necesitaba un poco de trabajo para que la herencia funcionara con algunos marcos comunes. Debido a las toneladas de enfoques posibles con la herencia prototípica de javascript, el compilador necesita un poco más de ayuda que para otros idiomas.

Es una herramienta comercial, pero puedo usarla para proyectos java, php, javascript, python y ruby, todo con algunos analizadores estáticos bastante decentes y ayudantes de refactorización. Solía ​​hacer mucho con emacs y ejecutar los procesos node.js para jshint y el compilador de cierre, pero esto es mucho menos frágil.