TypeScript

Next.js は React アプリケーション構築のための TypeScript ファーストな開発体験を提供します。

必要なパッケージの自動インストールと適切な設定の構成を含む、組み込みの TypeScript サポートを備えています。

新規プロジェクト

create-next-app は現在、デフォルトで TypeScript を同梱しています。

ターミナル
npx create-next-app@latest

既存プロジェクト

ファイル名を .ts または .tsx に変更することでプロジェクトに TypeScript を追加できます。next devnext build を実行すると、必要な依存関係が自動的にインストールされ、推奨設定オプションを含む tsconfig.json ファイルが追加されます。

既に jsconfig.json ファイルがある場合、古い jsconfig.json から paths コンパイラオプションを新しい tsconfig.json ファイルにコピーし、古い jsconfig.json ファイルを削除してください。

TypeScript の最低バージョン

import 名の型修飾子パフォーマンス改善 などの構文機能を得るためには、少なくとも TypeScript v4.5.2 以上を使用することを強く推奨します。

静的生成とサーバーサイドレンダリング

getStaticPropsgetStaticPathsgetServerSideProps には、それぞれ GetStaticPropsGetStaticPathsGetServerSideProps 型を使用できます:

pages/blog/[slug].tsx
import { GetStaticProps, GetStaticPaths, GetServerSideProps } from 'next'

export const getStaticProps = (async (context) => {
  // ...
}) satisfies GetStaticProps

export const getStaticPaths = (async () => {
  // ...
}) satisfies GetStaticPaths

export const getServerSideProps = (async (context) => {
  // ...
}) satisfies GetServerSideProps

豆知識: satisfies は TypeScript 4.9 で追加されました。TypeScript の最新バージョンへのアップグレードを推奨します。

API ルート

以下は API ルート用の組み込み型の使用例です:

import type { NextApiRequest, NextApiResponse } from 'next'

export default function handler(req: NextApiRequest, res: NextApiResponse) {
  res.status(200).json({ name: 'John Doe' })
}

レスポンスデータも型付けできます:

import type { NextApiRequest, NextApiResponse } from 'next'

type Data = {
  name: string
}

export default function handler(
  req: NextApiRequest,
  res: NextApiResponse<Data>
) {
  res.status(200).json({ name: 'John Doe' })
}

カスタム App

カスタム App がある場合、組み込み型 AppProps を使用し、ファイル名を ./pages/_app.tsx に変更できます:

import type { AppProps } from 'next/app'

export default function MyApp({ Component, pageProps }: AppProps) {
  return <Component {...pageProps} />
}

パスエイリアスと baseUrl

Next.js は tsconfig.json"paths""baseUrl" オプションを自動的にサポートします。

この機能について詳しくは モジュールパスエイリアスのドキュメント をご覧ください。

next.config.js の型チェック

next.config.js ファイルは Babel や TypeScript でパースされないため JavaScript ファイルである必要がありますが、以下のように JSDoc を使用して IDE で型チェックを追加できます:

// @ts-check

/**
 * @type {import('next').NextConfig}
 **/
const nextConfig = {
  /* ここに設定オプション */
}

module.exports = nextConfig

増分型チェック

v10.2.1 以降、Next.js は tsconfig.json で有効にした場合の 増分型チェック をサポートしています。これは大規模なアプリケーションでの型チェック速度向上に役立ちます。

TypeScript エラーの無視

Next.js はプロジェクトに TypeScript エラーが存在する場合、プロダクションビルド (next build) を失敗させます。

アプリケーションにエラーがある場合でも Next.js に危険を承知でプロダクションコードを生成させたい場合は、組み込みの型チェックステップを無効にできます。

無効にする場合は、ビルドまたはデプロイプロセスの一部として型チェックを実行していることを確認してください。そうでないと非常に危険です。

next.config.js を開き、typescript 設定で ignoreBuildErrors オプションを有効にします:

next.config.js
module.exports = {
  typescript: {
    // !! 警告 !!
    // プロジェクトに型エラーがあってもプロダクションビルドを成功させる
    // !! 警告 !!
    ignoreBuildErrors: true,
  },
}

バージョン変更点

バージョン変更点
v13.2.0静的に型付けされたリンクがベータで利用可能
v12.0.0SWC が TypeScript と TSX のコンパイルにデフォルトで使用されるようになり、ビルドが高速化
v10.2.1tsconfig.json で有効にした場合の 増分型チェック サポートが追加