学習バンザイITエンジニアの精神安穏日記

ITエンジニアというより、IT系雑務者

jest globalで変数定義してもTS2304のname not found エラーが出るときの対処方法(Google Apps Script x jestのヒントつき)

前提

背景

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を作る余裕と技術がある人でなければやめたほうがよい。

数名しか使わないようなアプリケーションならなおさら。

ちまたにアイデアが有るがゆえに、雰囲気で始められてしまう。

それが地獄の始まり。

そんな体験が待っているかもしれない。