トランスパイルしたい(tsc)
$ npx tsc
$ npx tsc src/main.ts
$ npx tsc --watch
tscコマンドで、TypeScript(.ts)をJavaScript(.js)に変換するコマンドです。
npx経由で実行することが多いです。
設定ファイル(tsconfig.json)がある場合は、自動で読み込まれます。
インストールしたい(typescript)
$ npm install --save-dev typescript @types/google-apps-script
typescriptパッケージをdevDependenciesとして追加します。
@types/google-apps-scriptは、GASの型情報を使うための型定義パッケージです。
明示的なインポートは必要ありません(というか不可です)。
注釈
devDependenciesにある@typesパッケージはVS Codeが自動で認識して、補完/チェックしてくれるようです。
型をつけたい
1// 変数の定義
2const 変数名: 型名 = 値
3
4// 関数の定義
5function 関数名(引数名: 型名): 戻り値の型名 {...}
: 型名で変数や関数の型を指定できます。
この型を使って、トランスパイルや静的解析で潜在的なエラーを検出します。
注釈
トランスパイルしたあとのJavaScriptには型の情報は残りません。
設定したい(tsconfig.json)
{
"compilerOptions": {
"target": "ES2015", // GAS V8対応
"module": "ESNext", // rollupでバンドル前提
"moduleResolution": "bundler",
"noUnusedLocals": true, // 未使用の変数でエラー
"noUnusedParameters": true, // 未使用の引数でエラー
"strict": true, // 厳格な型チェック
"outDir": "dist", // 出力先ディレクトリ
"rootDir": "src", // ソースコードのルート
"sourceMap": true, // デバッグ用にソースマップを生成
"removeComments": true // コメントを除去
},
"include": [
// トランスパイル対象
"src/**/*"
],
"exclude": [
// トランスパイル対象外
"node_modules",
"coverage",
]
}
tsconfig.jsonでTypeScriptのトランスパイルの設定ができます。
GASのV8ランタイムはECMAScript2015(ES6 / ES2015)相当の機能しかサポートしていないため、それに合わせた設定が必要です。
ここではrollupでモジュールをバンドルし、
claspでデプロイする前提でサンプルを作成しました。
targetは、トランスパイルして出力されるJavaScriptのECMAScriptバージョンを指定するオプションです。
GAS V8の場合は"ES2015"もしくは以降のバージョンを指定します。
moduleは、トランスパイルするときに利用するモジュール形式を指定するオプションです。
rollupなどでバンドルする場合は"ESNext"を指定しておけばよさそうです。
注釈
モダンブラウザ向けにESModuleを使う場合は、"ES2015"や"ES2020"などを指定します。
Node.jsを使う場合は"CommonJS"を指定します。GASでは非対応です。
moduleResolutionは、importやrequireで指定されたモジュールの探し方を指定するオプションです。
rollupなどのバンドラーを使う場合は"bundler"を指定します。
スクリプト設定したい(package.json)
{
"name": "...",
"scripts": {
"build": "tsc && rollup -c",
"watch": "tsc --watch",
"push": "clasp push",
"pull": "clasp pull",
"deploy": "npm run build && npm run push",
"...": "..."
}
}