Package Exports
- ts2gas
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ts2gas) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
ts2gas
A function that transpiles TypeScript to Google Apps Script.
ts2gas(code: string, transpileOptions?: ts.TranspileOptions): stringFor example the code below
const writeToLog = (message: string) => console.info(message);
let words = ['hello', 'world'];
writeToLog(`${words.join(' ')}`);gets transpiled into
// Compiled using ts2gas 1.3.0 (TypeScript 3.2.2)
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 ts2gasUsage
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}\`;
}
`);
// Transpiles to:
// function buildName(first, last) {
// return firstName + " " + lastName;
// }Advanced
Transpiler is called with this default ts.TranspileOptions object
{
compilerOptions: {
target: ts.ScriptTarget.ES3,
noLib: true,
noResolve: true,
module: ts.ModuleKind.None,
noImplicitUseStrict: true,
experimentalDecorators: true,
},
// the following property is to document this little known feature
// renamedDependencies: { SomeName: 'SomeOtherName' },
}ts2gas can accepts a custom ts.TranspileOptions object as second parameter.
ts2gas(source: string, transpileOptions: ts.TranspileOptions = {}): stringNote that the following compilerOptions cannot be changed: target, noLib, noResolve, module
TypeScript Tests
Some samples of TypeScript derived from https://angular-2-training-book.rangle.io/handout/features/
class Hamburger {
constructor() {
// This is the constructor.
}
listToppings() {
// This is a method.
}
}
// Template strings
var name = 'Grant';
var age = 42;
console.log(`Hello! My name is ${name}, and I am not ${age} years old.`);
// Rest args
const add = (a, b) => a + b;
let args = [3, 5];
add(...args); // same as \`add(args[0], args[1])\`, or \`add.apply(null, args)\`
// Spread array
let cde = ['c', 'd', 'e'];
let scale = ['a', 'b', ...cde, 'f', 'g']; // ['a', 'b', 'c', 'd', 'e', 'f', 'g']
// Spread map
let mapABC = { a: 5, b: 6, c: 3};
let mapABCD = { ...mapABC, d: 7}; // { a: 5, b: 6, c: 3, d: 7 }
// Destructure
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) // -> Hello Jane N/A Doe
sayName(john) // -> Helo John Smith Doe
// Export
export const pi = 3.141592;
function add(x: number, y: number): number {
return x + y;
}
console.log(add(2, 2)); // 4
// Decorators
function Override(label: string) {
return function (target: any, key: string) {
Object.defineProperty(target, key, {
configurable: false,
get: () => label
});
}
}
class Test {
@Override('test') // invokes Override, which returns the decorator
name: string = 'pat';
}
let t = new Test();
console.log(t.name); // 'test'