前提
- jestを使っている
- jest.config.jsのglobalsに変数を定義している
背景
slack API x Google Apps Script x clasp x jestで開発している。
GAS作るときに野良ライブラリを使用すると、npmでpackage管理してimportするわけではないため、通常import文を書かない。
したがって、mockのようなものを用意しなければならない。
というわけで、以下のようにmock的なものを準備する。
jest.config.js内
まず上記のように定義する。
module.exports = { globals: { SlackApp: { create: () => { return { getChannel: (a) => { return { postMessage: (a) => { return a; } } } } } }, } }
問題点
これだけでは、表題のように、TS2304 name not found エラーが発生する。
解決案
declare分によって、型を定義する。
以下、サンプルコード
+ declare const SlackApp: any
class SlackBot {
constructor() {
this.accessToken = ""
this.slackApp = SlackApp.create(this.accessToken)
}
}
その場しのぎ感。本来だったら型を書けばいいのだが、工数の都合で無理。
所感
slack API x Google Apps Script x clasp x jest x TypeScriptでの開発は、普通の人間はやめたほうが良い。
GASの野良ライブラリのtypeを作る余裕と技術がある人でなければやめたほうがよい。
数名しか使わないようなアプリケーションならなおさら。
ちまたにアイデアが有るがゆえに、雰囲気で始められてしまう。
それが地獄の始まり。
そんな体験が待っているかもしれない。