Saltar al contenido

Usar mecanografiado con Google Apps Script

Puede darse el caso de que encuentres algún error en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes añadir el código al trabajo final.

Solución:

Ahora es posible usar Typescript para desarrollar proyectos de Google Apps Script, pero esto no se puede hacer directamente en Apps Script Editor.

De acuerdo con Develop Apps Script usando TypeScript, la forma más fácil es usar clasp.

Relacionado

  • Habilitación de autocompletar para Google Apps Script en IDE instalado localmente

He estado investigando un escenario similar en las últimas dos semanas (sin usar TypeScript pero aún con ES6/ES7).

Algunas de las cosas que he encontrado que pueden resultarle útiles para lo que está tratando de lograr:

  • El complemento de paquete web de GAS le permite usar el paquete web para cargar módulos dentro de GAS al detectar cuándo está asignando al objeto global y luego generar una función de nivel superior que GAS puede ejecutar. Esto significa que su importación y exportación serán manejadas por webpack para que no tenga que eliminarlas.
  • no pude conseguir import * as x from y sintaxis para trabajar sin embargo import x from y y import x from y funcionó bien al usar webpack.
  • Puede incluir su HTML como un string en su paquete usando el cargador HTML.

Si no quiere usar webpack, una solución es poner todo su código en un solo app.ts archivo, cree un objeto que contenga todas sus funciones, configure las funciones para que sean de nivel superior para que GAS pueda recogerlas. También puede exportar el objeto contenedor y usarlo en un conjunto de pruebas. Cuando compila con Babel, use el complemento babel-plugin-transform-remove-export para eliminar la declaración de exportación.

const app = 
  onInstall: () =>  ...
  ,
  onOpen: () =>  ...
  


const  onOpen, onInstall  = app;

export  app ;

Fondo

Las cosas han cambiado desde que escribió esta pregunta y hoy en día hay un mejor soporte para TypeScript para el desarrollo de AppsScript. Como dijo Aliabbas Merchant, la mejor manera de compilar TS a GAS es usando clasp, que es una herramienta CLI para desarrollar aplicaciones de AppsScript. Clasp usa la biblioteca ts2gas bajo el capó para convertir TS a GAS, por lo que ya no es necesario Webpack ni ningún otro paquete solo para convertir el código en AppsScript.

Lo que Aliabbas Merchant no mencionó es que ts2gas no admite (¡todavía!) export sintaxis, lo que provoca errores de linter al desarrollar, y no será bien aceptado por el IDE (incluso si deshabilita el linter, el IDE no reconocerá los vars importados y no los considerará como una referencia a las exportaciones...)

El problema

El problema comienza por el hecho de que AppsScript no usa el sistema de módulos y cada var de nivel superior que se define también es accesible desde otros archivos (en contraste con TS que "envuelve" los archivos como módulos). El problema con la versión actual de ts2gas es que transpila la siguiente declaración:

export var x = 5;

en:

exports.x = 5

Entonces, después de que el cierre se convierte .ts a .gs, cuando otro archivo de .gs intenta acceder a la var exportada, no la encuentra. En realidad, esta var no se almacena como una var global como se esperaba, pero dentro del exports objeto (que en sí mismo es una var global). Si pudiéramos "engañar" al compilador de alguna manera, para que ambos mantengan la var en el entorno global, aunque también se exporte (para que podamos trabajar con TS sin errores), ganaríamos.

Soluciones

Así que estamos buscando una solución. Puede encontrar algunos en clasp usando documentos TS (https://github.com/google/clasp/blob/master/docs/typescript.md), pero hay otro truco que he encontrado más simple:

Definiendo localmente la var (sin exportarla), y luego exportando un objeto con todas las vars (que también pueden ser funciones, por supuesto) que queramos exportar. TS se comportará como si exportara los vars regularmente (es un azúcar sintáctico para exportar vars), pero el compilador mantendrá los vars tanto globales como dentro de un objeto de exportación.

Ejemplo

const a = 5;

function b() 
   return 'Hello World';


export 
   a,
   b

De esta manera, los vars realmente se exportan y se pueden usar en TS como de costumbre, pero también permanecerán en el env global después de compilar en archivos GAS (el compilador en realidad los agregaría al export objeto, pero no debería importarnos).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.