org - script to coffeescript
AƱadiendo mecanografiado a Coffeescript (4)
Tengo una configuración de cadena de compilación que convertirá un archivo de coffeescript a mecanografiado a javascript. Mi pregunta es: ¿cuál es la forma más intrusiva de agregar firmas de tipo a una función de coffeescript?
coffeescript soporta javascript en bruto a través de backticks. Sin embargo, eso significa que coffeescript ya no entiende el fragmento de comilla invertida.
Coffeescript rechaza estos:
f = (`a:String`) -> a + 2
f = (a`:String`) -> a + 2
Puedo escribir esto encima de la función:
`var f = (String) => any`
Se compila, pero no hace la comprobación de tipo. Creo que esto se debe a que Coffeescript ya declaró la variable.
La única forma en que podría descubrir cómo hacer que funcione requiere una gran cantidad de repeticiones.
f = (a) ->
`return (function(a:String){`
a + 2;
`})(a)`
Los backticks no parecen funcionar correctamente en el nuevo compilador de Coffeescript Redux: https://github.com/michaelficarra/CoffeeScriptRedux/issues/71
Soy muy consciente de que este es un esfuerzo dudoso, es solo una experiencia en este momento. Actualmente utilizo contract.coffee, pero estoy buscando tipos reales.
Aquí está mi proyecto que transpila CoffeeScript en TypeScript y luego lo combina con un archivo d.ts que contiene tipos. Luego informa errores de compilación, si los hay.
Se llama Compiled-Coffee .
Creo que lo que se me ocurrió es lo mejor que puedo hacer. Las cosas son más difíciles en el nuevo compilador Coffeescript Redux: en realidad, sería más fácil intentar piratear el compilador actual de coffeescript para que esto funcione.
La forma de hacer que este look sea menos hacky es:
`var f : (a:Number) => Number = originalF`
Sin embargo, la inferencia de tipos débiles de mecanografiado no funciona tan bien con esta forma. Esto consigue el análisis de tipo adecuado:
f = (a) ->
`var a : Number = a`
a + 2
Sin embargo, todavía no estoy seguro de cómo especificar un valor de retorno con este formulario.
Si desea escribir CoffeeScript, es mejor escribir CoffeeScript y compilarlo en JavaScript.
El beneficio de TypeScript es principalmente el beneficio en tiempo de diseño y mejores herramientas, por lo que usarlo en medio de CoffeeScript y JavaScript agrega muy pocos beneficios, ya que obtendrá tiempo de diseño y herramientas basadas en su código de CoffeeScript.
Puede consumir las bibliotecas que escribe en CoffeeScript en TypeScript y viceversa, por lo que puede mantener sus bibliotecas de CoffeeScript en CoffeeScript y consumirlas en sus nuevos archivos de TypeScript mientras decide qué camino tomar.
Actualización: no estoy seguro de cómo puede haber una interpretación tan errónea de esta respuesta. Voy a suponer que no lo he explicado bien (en lugar de suponer que es un simple argumento o una hipersensibilidad al lenguaje). comparación).
TypeScript es de hecho un sistema de tipos para JavaScript. Los tipos estáticos son más útiles para usted como programador anteriormente en el flujo de trabajo. Tener advertencias de tiempo de diseño en su IDE significa una rápida corrección de errores comunes como nombres de variables mal escritos, parámetros incorrectos, operaciones no válidas y mucho más. Tener el código subrayado y anotado con un error significa retroalimentación instantánea. Tener esto en tiempo de compilación es bueno, pero su ciclo de retroalimentación es más largo. Ni siquiera voy a hablar sobre el tiempo de ejecución dado que todos los tipos se borran en este punto cuando se usa TypeScript.
En cuanto a todos los comentarios de "TypeScript vs CoffeeScript", esta pregunta no se trata de eso en absoluto. La pregunta es acerca de compilar desde CoffeeScript a TypeScript y luego a JavaScript. Veamos por qué esto podría no ser ideal:
- Solo obtendrás feedback de tipo en tiempo de compilación
- No obtendrás la finalización automática
- Su código de CoffeeScript ya no será compacto, tendrá anotaciones de tipo
- Tu código de CoffeeScript ya no será válido sin tu compilador intermedio
- Tendrá que usar un compilador adicional y tendrá que estar al día con la versión de CoffeeScript xy la versión de TypeScript y
- Tu IDE no entenderá tu código de CoffeeScript
Typescript es un tipo fuerte de javascript. Coffee-script proporciona una forma más cómoda de escribir y leer. No trato el café-guión como un lenguaje. Es solo una forma, un estilo que se puede adjuntar a cualquier idioma.
Es muy feo y estúpido a través del contraluz el "apoyo" al tipo tan fuerte. La forma correcta de implementar el script de café con tipo fuerte:
- Modifique la fuente de CoffeeScriptRedux para agregar el tipo fuerte admitido
- El TypedCoffeeScript ya lo ha hecho.
- Modifique la fuente del analizador Typescript para usar la sintaxis de coffee-script.
- Parece que nadie hace esto.