clasp を使うと、GAS をTypeScriptで書くことができる。 clasp 1.5.0 でサポートされるようになった。

https://github.com/google/clasp/blob/master/docs/typescript.md

ローカルでtsファイルで書いたGASをpushすると、自動でトランスパイルしてからアップロードしてくれる

GASをTSで書けるようにする

claspのプロジェクトで、google-apps-scriptの型定義を追加

$ npm install -D @types/google-apps-script

これによって、IDE上でSpreadsheetAppなどGAS固有の定義も補完されるようになる

tsconfig.jsonを追加する

tsconfig.json

{
  "compilerOptions": {
    "lib": [
      "esnext"
    ],
    "target": "ES2019",
    "experimentalDecorators": true,
    "esModuleInterop": true
  }
}

tsファイルを作ってpushする

hello.ts

const greeter = (person: string) => {
    return `Hello, ${person}!`;
}
 
function testGreeter() {
    const user = 'Grant';
    Logger.log(greeter(user));
}

push

$ clasp push

プロジェクトを開く

$ clasp open

.gsファイルに変換されたファイルが作成されている

注意

  • clasp pull すると、変換されたjsファイルがダウンロードされる
  • 基本的にはローカルでTypeScriptで開発してpushするという一方通行になるので、複数人で開発するときにもそのフローを徹底する
  • よくわからずにWeb上で編集する人がいると、大変なことになる(実体験)