Gatsby.js を TypeScript 化する
tsconfig.jsonを追加
tsconfig.json
GraphQL Schema, リクエストの型生成
Gatsby はリソースに対して GraphQL でリクエストを送りデータを取得する
GraphQL リクエストのレスポンスの型を、gatsby-plugin-typegen を使い生成する。
gatsby-config.js
の plugins にgatsby-plugin-typegen
を追記する。
src/components/index.ts
次に、各コンポーネントの query にクエリ名を追加していきます。
この変更をすることでそのクエリ専用の型が生成されます。
(例: src/components/index.js query BlogIndex
の部分を追記している)
🔗 src/components/index.ts
最後にyarn build
を実行すると、src/__generated__/gatsby-types.ts
が生成されているはずです。
ここに GraphQL リクエストの型定義があります。
先ほど追加した BlogIndex クエリの型を見てみると、、
🔗 src/pages/index.ts
ちゃんと生成されてますね! 最高便利。
各コンポーネントファイルのTypeScript化
これで準備ができたので、各ファイルを TypeScript 化していきます。
gatsby-plugin-typescriptの追加から入る記事が多いのですが、2020 年 10 月現在、Gatsby にはgatsby-plugin-typescript
がすでに組み込まれているので、何もせずで大丈夫です。
何か TypeScript のビルド関連で追加の設定をしたい場合は、gatsby-config.js の plugins でgatsby-plugin-typescript
を追加して、option を設定してください。
各コンポーネントのファイル拡張子を.js
から.tsx
に書き換えましょう。
そして、StaticQuery の戻り値など型エラーとなっている箇所に型をつけていきます。
例えば、src/pages/index.ts
の型付けは以下のようになります。
🔗 src/pages/index.ts
ポイントは以下のようにReact.FC
、PageProps
などのジェネリクス型を使うことと、gatsby-plugin-typegen
で生成した型を使うことです。
これでdata
の型がBlogIndexQuery
の型で推論されます。
あとは、適宜 Optional Chaining や、Non null Assertion を使って型エラーを解決しましょう。
4. gatsby-Node.jsのTypeScript化
gatsby-node.js
でも TypeScrip で書けるようにしていきます。ここではts-nodeを追加ます。
ここの書き方は@Takepepeさんの以下の記事を参考にさせていただきました。良記事ありがとうございます🙏
Gatsby.js を完全TypeScript化する - Qiita
yarn add -D ts-node
そして、gatsby-config.js
を以下のように変更します。
🔗 gatsby-config.js
そして、今までgatsby-node.js
に記述していた内容をsrc/gatsby-node/index.ts
に移動して、型を設定します。
基本的に node の API はGatsbyNode
から型を取得できます。
本当は、allMarkdownRemark
のクエリ部分の方もgatsby-plugin-typegen
で生成したかったのですが、上手く認識してくれませでした。やり方わかる方いたら教えてください🙏
(ドキュメントの Provides utility types for gatsby-node.js.
はまだチェックがついていないので、まだ未対応なのかな?)。
🔗 src/gatsb-node/index.ts
これでgatsby-Node.js
の TypeScript 化も完了です🎉
参考