ts2gas
A function that transpiles TypeScript to Google Apps Script.
ts2gas(code: string, transpileOptions?: ts.TranspileOptions): string
For example the code below
const writeToLog = (message: string) => console.info(message);
let words = ['hello', 'world'];
writeToLog(`${words.join(' ')}`);
gets transpiled into
var exports = exports || {};
var module = module || { exports: exports };
var writeToLog = function (message) { return console.info(message); };
var words = ['hello', 'world'];
writeToLog("" + words.join(' '));
Install
yarn add ts2gas
Usage
Write Apps Script as TypeScript without including any imports.
const ts2gas = require('ts2gas');
let transpiled = ts2gas(`
function buildName(first:string, last:string) {
return \`\${firstName} \${lastName}\`;
}
`);
Advanced
Transpiler is called with this default ts.TranspileOptions object
{
compilerOptions: {
experimentalDecorators: true,
isolatedModules: true,
module: "None",
noImplicitUseStrict: true,
noLib: true,
noResolve: true,
target: "ES3",
},
}
ts2gas can accepts a custom ts.TranspileOptions object as second parameter.
ts2gas(source: string, transpileOptions: ts.TranspileOptions = {}): string
Note that the following compilerOptions cannot be changed:
{
isolatedModules: true,
module: "None",
noLib: true,
noResolve: true,
}
TypeScript Tests
Some samples of TypeScript derived from https://angular-2-training-book.rangle.io/handout/features/
class Hamburger {
constructor() {
}
listToppings() {
}
}
var name = 'Grant';
var age = 42;
console.log(`Hello! My name is ${name}, and I am not ${age} years old.`);
const add = (a, b) => a + b;
let args = [3, 5];
add(...args);
let cde = ['c', 'd', 'e'];
let scale = ['a', 'b', ...cde, 'f', 'g'];
let mapABC = { a: 5, b: 6, c: 3};
let mapABCD = { ...mapABC, d: 7};
let jane = { firstName: 'Jane', lastName: 'Doe'};
let john = { firstName: 'John', lastName: 'Doe', middleName: 'Smith' }
function sayName({firstName, lastName, middleName = 'N/A'}) {
console.log(`Hello ${firstName} ${middleName} ${lastName}`)
}
sayName(jane)
sayName(john)
export const pi = 3.141592;
function add(x: number, y: number): number {
return x + y;
}
console.log(add(2, 2));
function Override(label: string) {
return function (target: any, key: string) {
Object.defineProperty(target, key, {
configurable: false,
get: () => label
});
}
}
class Test {
@Override('test')
name: string = 'pat';
}
let t = new Test();
console.log(t.name);