TypeScript
Next.jsは、Reactアプリケーションを構築するためのTypeScriptファーストな開発環境を提供します。
必要なパッケージの自動インストールと適切な設定のために、ビルドインのTypeScriptサポートが付属しています。
またエディタ用のTypeScriptプラグインもあります。
🎥 動画を見る: 組み込みのTypeScriptプラグインについて詳しく学ぶ → YouTube (3分)
新規プロジェクト
create-next-app
は現在、デフォルトで TypeScript で提供されます。
npx create-next-app@latest
既存のプロジェクト
.ts
/ .tsx
へのファイルの名前変更により、プロジェクトにTypeScriptを追加します。next dev
と next build
を実行して、必要な依存関係を自動的にインストールし、推奨される設定オプションを持つ tsconfig.json
ファイルを追加します。
すでに jsconfig.json
ファイルがある場合、jsconfig.json
から tsconfig.json
ファイルに paths
コンパイラオプションをコピーし、jsconfig.json
ファイルを削除します。
TypeScriptプラグイン
Next.jsには、VSCodeや他のコードエディタで使用できるカスタムのTypeScriptプラグインと型チェッカーが含まれています。
VS Codeでプラグインを有効にするには、次の手順を実行します。
- コマンドパレットを開きます(
Ctrl/⌘
+Shift
+P
)。 - "TypeScript: Select TypeScript Version" を検索します。
- "Use Workspace Version" を選択します。
これで、ファイルの編集時にカスタムプラグインが有効になります。next build
を実行すると、カスタムの型チェッカーが使用されます。
プラグインの機能
TypeScriptプラグインでは以下のことができます。
- Segment 構成オプションに無効な値が渡された場合に警告を表示します
- 利用可能なオプションとコンテキストのドキュメントを表示します
use client
ディレクティブが正しく使用されていることを確認します- Client Component でのみ
useState
などのクライアントフックが使用されることを保証します
Good to know: 将来的にはさらなる機能が追加される予定です。
最低限のTypeScriptバージョン
インポート名の type 修飾 子 や パフォーマンスの改善 などの文法機能を利用するために、少なくとも TypeScript の v4.5.2
にすることを強くお勧めします。
静的に型付けされたリンク
next/link
を使用してページ間を移動する際に、Next.jsではリンクに静的な型付けを行うことができます。これにより、タイポやその他のエラーを防ぐことができ、ページ間の移動時の型の安全性が向上します。
この機能を有効にするには、experimental.typedRoutes
を有効にし、プロジェクトがTypeScriptを使用している必要があります。
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
typedRoutes: true,
},
}
module.exports = nextConfig
Next.jsは、アプリケーションのすべての既存のルートに関する情報を含む.next/types
というリンク定義を生成します。これにより、TypeScriptはエディタで無効なリンクに関するフィードバックを提供できます。
現在の実験的なサポートでは、動的Segmentを含む任意の文字列リテラルがサポートされています。リテラル以外の文字列では、href
をas Route
として手動でキャストする必要があります。
import type { Route } from 'next'
import Link from 'next/link'
// hrefが有効なルートの場合、TypeScriptのエラーは発生しません
<Link href="/about" />
<Link href="/blog/nextjs" />
<Link href={`/blog/${slug}`} />
<Link href={('/blog' + slug) as Route} />
// hrefが無効なルートの場合、TypeScriptのエラーが発生します
<Link href="/aboot" />
next/link
をラップするカスタムコンポーネントでhref
を受け入れるには、ジェネリックを使用します。
import type { Route } from 'next'
import Link from 'next/link'
function Card<T extends string>({ href }: { href: Route<T> | URL }) {
return (
<Link href={href}>
<div>My Card</div>
</Link>
)
}
仕組み
next dev
またはnext build
を実行すると、Next.jsは.next
内に隠し.d.ts
ファイルを生成し、アプリケーションのすべての既存のルートに関する情報を含みます(リンクのhref
タイプとして有効なすべてのルート)。この.d.ts
ファイルはtsconfig.json
に含まれ、TypeScriptコンパイラは.d.ts
ファイルをチェックし、エディタで無効なリンクに関するフィードバックを提供します。