Gatsbyの__PATH_PREFIX__変数がエディタ上で変数未定義エラーになってたので直す
2022-12-08
はじめに
このブログは Gatsby で作っていて言語としては TypeScript を使っています。ソースコードを編集するといつも、__PATH_PREFIX__
を呼び出している箇所でエラーが出ていました。そもそもこの変数は、Gatsby が自動で作成してくれる変数です。ビルドするとエラーは出ませんが、エディタ上では未定義の変数エラーとして扱われていました。
Cannot find name '__PATH_PREFIX__'.ts(2304)
無視してもいいのですが、あ まりにも気になりすぎたのでエラーとして認識されないように修正しました。
やったこと
やったことは、型定義ファイルを作成し、グローバル変数として扱うようにしました。
具体的には、src/@types/global.d.ts
ファイルを作成し、以下のコードを追記しました。TypeScript では、@types
ディレクトリは、型定義を扱うモジュールとする(ことが多い?)みたいでこのディレクトリを作成しました。もしかしたら、型定義を自作で行う場合types
だけの方がいいのかな?とも思います。が、動いているので一旦良しとします!
declare const __PATH_PREFIX__: string;
これを作成し、__PATH_PREFIX__
を呼び出しているファイルでimport
すると直りました。ただこれだと毎回import
が面倒だし、そもそもグローバル変数だからいい感じに勝手に読み取ってほしいなと思い、さらに調べました。
すると、tsconfig.json
なるものが TypeScript の世界にはあることを知りました。ここに今回自作した型定義ファイルを読み込むようにすることで毎回import
をしなくてもエディタ上で__PATH_PREFIX__
に対してエラーが表示しなくなりまし た。
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"jsx": "react",
"baseUrl": "./src/@types"
}
}
baseUrl
は、絶対パス参照でないモジュール名を解決するための基点となるディレクトリを設定できる
オプションみたいです。本来は呼び出し元のコンポーネントよってimport
する時のパスがずれて面倒になったりするときに解決するためののオプションなんですかね?今回は、自作した型定義ファイルのディレクトリを指定しました。
困ったこと
今は解決しているのですが、試行錯誤の時に困ったことも書いておきます。(そんな困ってもないけど)
global.d.ts
を作成しグローバル変数を定義して、VSCode 上でこのファイルを開いたまま、__PATH_PREFIX__
が書いてあるファイルを開くと、import
やtsconfig.json
に何も設定をせずともエラーが消えました。しかし、VSCode 上で、global.d.ts
を閉じると__PATH_PREFIX__
に対してエラーが出てきました。
LSP?が静的解析をする時に、いい感じに現在開いているファイルを考慮して気を利かせているんですかね?
最後に
TypeScript の設定は難しいですね。しかしフロントエンドをやるとなったら TypeScript は避けて通れない道だと思うので、向き合う必要があるなと思いました。