Búsqueda de sitios web

Cómo usar TypeScript en Go


Estoy intentando crear una aplicación Angular que use un servidor REST API en golang. Hay algunas lógicas de negocio que están escritas en typescript y se usan en el front-end. Algunas de estas necesitan ser usadas en el back-end. Para evitar escribir la misma lógica en golang, me preguntaba si es posible ejecutar código typescript en golang. Encontré SWIG para ejecutar código C++ en golang, pero no encontré nada para typescript. Soy consciente de que puedo ejecutar código golang en Angular usando webassembly u otras herramientas, pero no se me permite escribir esos códigos en golang.

Respuesta #1

Puedes usar MetaCall, una biblioteca que proporciona interfaces de funciones extranjeras entre lenguajes en la que he estado trabajando durante varios años. Básicamente, permite llamar a funciones de TypeScript desde Go sin usar WebAssembly. Las llamadas se realizan en el mismo proceso, por lo que aún puedes obtener un buen rendimiento y usar TypeScript estándar en lugar de un subconjunto del lenguaje.

El soporte de TypeScript todavía está en desarrollo, pero puedes ver un ejemplo funcional de cómo llamar a funciones de TypeScript desde Go aquí.

Con este enfoque probablemente puedas crear un repositorio común o paquete npm con la lógica de TypeScript como una biblioteca, y luego importarlo tanto en el Front-end como en el Back-end al mismo tiempo.

Puedes instalar MetaCall siguiendo estas instrucciones. Una vez que lo tengas instalado, puedes importar tu paquete npm en tu proyecto Go usando:

metacall npm install your-package

O agregarlo con git como un submódulo.

Más adelante puedes importar la biblioteca de TypeScript como en el ejemplo. No necesitas transpilarla, MetaCall se encargará de ello. Recuerda importar MetaCall en tu código Go y ejecutar go mod tidy.

Solo como recordatorio, el ejemplo compila MetaCall a mano, y el script de instalación descarga una versión precompilada.

Respuesta #2

Puedes escribir la lógica duplicada en AssemblyScript, un subconjunto estricto de TypeScript, compilarlo a WebAssembly y luego ejecutarlo en Go con un entorno de ejecución como Wasmer.

Ten en cuenta, sin embargo, que AssemblyScript todavía está en desarrollo.