tsconfig.jsonとは、TypeScriptコンパイラ(tsc)に「どのファイルを、どのJavaScriptの版で、どれくらい厳しく型チェックするか」を伝える設定ファイルです。 2026年7月に公開されたTypeScript 7.0(Go言語で書き直されたネイティブ版)では、strict が既定で有効になり、baseUrl や "target": "es5" などは設定するとエラーで止まるようになりました。

この記事では、主要オプションを「意味・推奨値・理由」の一覧表で整理し、TypeScript 7.0で変わった既定値と削除されたオプションを実際に出たエラー文つきでまとめます。さらに、Vite+React、Node.js ESM、ライブラリ、Next.jsのコピペ用テンプレートと、同じプロジェクトを tsc 5.9/6.0/7.0で型チェックした実行時間も載せています。検証はすべて TypeScript 7.0.2(npm の latest)、比較用に 6.0.3・5.9.3、Node.js 22.22.2 で行いました。

tsconfig 主要オプションの早見表

オプション 意味 推奨値(2026年) TS 7.0の既定値
target 出力するJSの版 es2022〜es2024(実行環境に合わせる) es2025
module 出力するモジュール形式 ビルドツールあり→esnext/Node.js→nodenext esnext
moduleResolution importの探し方 bundler または nodenext module から自動(多くは bundler)
lib 使える組み込みAPIの型 target と揃える+ブラウザなら DOM target から自動
strict 厳格な型チェック一式 true true
noUncheckedIndexedAccess 配列・辞書の要素に undefined を足す true false
exactOptionalPropertyTypes ?: に undefined 代入を禁止 true(新規なら) false
verbatimModuleSyntax 型だけのimportに type を必須に true false
isolatedModules 1ファイル単位の変換で安全な書き方に限定 true false
paths importの別名(@/ など) 必要なら。./ 始まりで書く なし
rootDir ソースの起点 ./src を明示 tsconfigのあるフォルダ
outDir 出力先 ./dist なし
declaration .d.ts を出力 ライブラリは true false
sourceMap .js.map を出力 Node.jsアプリは true false
skipLibCheck .d.ts の検査を省略 true false
jsx JSXの変換方法 React 17以降は react-jsx なし
types 自動で読む @types 使うものを列挙(["node"] など) [](空)
allowJs .js もコンパイル対象に 移行中だけ true false
incremental 差分ビルド情報を保存 大きめのプロジェクトで true false
noEmit JSを出力しない ビルドツールに任せるなら true false

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「tsconfig設定一覧|TypeScript 7対応の推奨値とテンプレート」

TypeScript 7.0で変わった既定値の一覧

TypeScript 7.0は、6.0で予告された既定値の変更と非推奨オプションの削除をそのまま引き継いでいます。 公式ブログ「Announcing TypeScript 7.0」と「TypeScript 6.0」のリリースノートで確認した内容です。

オプション 5.x までの既定値 6.0/7.0の既定値 影響
strict false true 何も書かないと厳格チェックになる
module commonjs(target依存) esnext 出力がESMになる
target es5 その時点の最新の確定版(7.0.2は es2025) 構文が変換されずに出力される
types node_modules/@types を全部読む [] process や fs が見つからなくなる
rootDir 入力ファイルから推測 tsconfigのあるフォルダ outDir の中の構成が変わることがある
noUncheckedSideEffectImports false true import "./x" の書き間違いを検出
libReplacement true false 速度のための変更
stableTypeOrdering なし 7.0では常に有効 型の並び順が決定的になる
esModuleInterop false 常に true(false 不可) —

何も設定しない tsconfig でも、7.0では strict のエラーが出ます。 次のファイルを { "include": ["src"] } だけの tsconfig で型チェックしました。

// src/app.ts
import "./polyfils"; // ファイル名のつづり間違い
function total(prices) {
  return prices.reduce((a, b) => a + b, 0);
}
let memo: string = null;
console.log(total([100, 200]), memo);
$ npx tsc -p . --noEmit   # TypeScript 7.0.2
src/app.ts(1,8): error TS2882: Cannot find module or type declarations for side-effect import of './polyfils'.
src/app.ts(2,16): error TS7006: Parameter 'prices' implicitly has an 'any' type.
src/app.ts(3,25): error TS7006: Parameter 'a' implicitly has an 'any' type.
src/app.ts(3,28): error TS7006: Parameter 'b' implicitly has an 'any' type.
src/app.ts(5,5): error TS2322: Type 'null' is not assignable to type 'string'.

同じファイルを TypeScript 5.9.3 で実行するとエラー0件(終了コード0)でした。 つまり「tsconfigを変えていないのに7.0で急にエラーが増えた」ときは、既定値の変更が理由です。すぐに全部直せない場合は "strict": false を書けば従来に近い動きになります(7.0.2で strict: false はエラーになりません)。

TypeScript 7.0で削除されエラーになるオプション

6.0では「非推奨」の警告(ignoreDeprecations: "6.0" で抑止可)だったものが、7.0では「削除済み」となり、抑止できません。

設定 7.0での扱い 代わりの書き方
"target": "es5" 削除(TS5108) es2015 以上
"target": "es3" 値として受け付けない(TS6046) es2015 以上
"downlevelIteration" 削除(TS5102) 削除するだけ
"moduleResolution": "node" / "node10" 削除(TS5108) bundler か nodenext
"moduleResolution": "classic" 削除(TS5108) bundler か nodenext
"module": "amd" / "umd" / "system" / "none" 削除(TS5108) esnext+バンドラー
"baseUrl" 削除(TS5102) paths を ./ 始まりで書く
"outFile" 削除(TS5102) esbuild・Rollupなどのバンドラー
"esModuleInterop": false 削除(TS5108) 書かない(常に true)
"allowSyntheticDefaultImports": false 削除(TS5108) 書かない
"alwaysStrict": false 削除(TS5108) 書かない
"ignoreDeprecations": "6.0" 7.0では効かない 上の置き換えを行う

5.x時代に廃止済みの importsNotUsedAsValues などは TS5023: Unknown compiler option になります。コード側では module Foo {}(→ namespace Foo {})と import ... asserts {}(→ with {})も使えなくなりました(公式ブログより)。

古いtsconfigを6.0と7.0で実行したエラー

2020年ごろの解説によくある設定を、6.0.3と7.0.2で実行しました。

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "baseUrl": ".",
    "paths": { "@/*": ["src/*"] },
    "downlevelIteration": true,
    "esModuleInterop": false,
    "outDir": "dist"
  },
  "include": ["src"]
}
$ npx tsc -p .   # TypeScript 6.0.3(抜粋)
tsconfig.json(3,15): error TS5107: Option 'target=ES5' is deprecated and will stop functioning in TypeScript 7.0. Specify compilerOption '"ignoreDeprecations": "6.0"' to silence this error.
tsconfig.json(6,5): error TS5101: Option 'baseUrl' is deprecated and will stop functioning in TypeScript 7.0. ...
(moduleResolution・downlevelIteration・esModuleInterop も同様に計5件+rootDir の TS5011)
$ npx tsc -p .   # TypeScript 7.0.2
tsconfig.json(3,15): error TS5108: Option 'target=ES5' has been removed. Please remove it from your configuration.
tsconfig.json(5,25): error TS5108: Option 'moduleResolution=node10' has been removed. Please remove it from your configuration.
tsconfig.json(6,5): error TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration.
  Use '"paths": {"*": ["./*"]}' instead.
tsconfig.json(7,24): error TS5090: Non-relative paths are not allowed. Did you forget a leading './'?
tsconfig.json(8,5): error TS5102: Option 'downlevelIteration' has been removed. Please remove it from your configuration.
tsconfig.json(9,24): error TS5108: Option 'esModuleInterop=false' has been removed. Please remove it from your configuration.
tsconfig.json(10,5): error TS5011: The common source directory of 'tsconfig.json' is './src'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout.

7.0では baseUrl がなくなるため、paths の "src/*" も「./ がない」というエラー(TS5090)になります。 直した設定は次のとおりです。

{
  "compilerOptions": {
    "target": "es2022",
    "module": "nodenext",
    "rootDir": "./src",
    "outDir": "./dist",
    "types": ["node"],
    "paths": { "@/*": ["./src/*"] }
  },
  "include": ["src"]
}

types を書き忘れると、import { readFileSync } from "fs" で次のエラーになりました。7.0の既定値は types: [] なので、Node.jsの型は明示が必要です。

src/index.ts(2,30): error TS2591: Cannot find name 'fs'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig.

paths は「型チェック用」、実行時は imports を使う

paths はtscが型を解決するための設定で、出力されるJSのimport文は書き換えません。 上の設定でビルドは通りますが、node dist/index.js を実行すると次のエラーになりました。

Error: Cannot find module '@/utils/format'

ビルドツールを使わないNode.jsアプリでは、package.json の imports(サブパスインポート)を使うと、tscとNode.jsの両方が同じ別名を理解します。

{
  "type": "module",
  "imports": { "#app/*": "./dist/*" }
}
// src/index.ts
import { yen } from "#app/utils/format.js";
$ npx tsc -p . && node dist/index.js
120円
340円

TypeScript 6.0以降は #/ で始まる別名にも対応していますが、Node.js 22.22.2では #/utils/format.js が ERR_INVALID_MODULE_SPECIFIER になりました。 Node.js 22で使うなら #app/ のように # の後に名前を付けると動きます。

TypeScript 7.0へ上げる手順

公式は「6.0で ignoreDeprecations なしにエラーなくビルドできれば、7.0でも動く」としています。 そのため、5.xからは6.0を経由すると原因を切り分けやすくなります。

手順 コマンド/作業
1. 6.0で確認 npm i -D typescript@6 → npx tsc --noEmit
2. 非推奨を解消 上の「削除されるオプション」表のとおり置き換え
3. 既定値の変更に備える types・rootDir・(必要なら)strict を明示
4. 7.0へ npm i -D typescript@7.0.2(コマンド名は tsc のまま)
5. 旧版も残す場合 npm i -D typescript6@npm:@typescript/typescript6(コマンドは tsc6)

7.0は安定したプログラム用APIをまだ公開していません。 公式ブログによると、Vue・Svelte・Astro・MDX・Angularテンプレートなど、埋め込み言語の型チェックは当面6.0を使う想定です(7.1でAPI提供予定)。なお今回、create-vite 9.2.1 のReact+TypeScriptテンプレート(生成時は typescript ~6.0.2)を7.0.2に差し替えて npm run build(tsc -b && vite build)を実行したところ、変更なしでビルドが通りました。

tsc 5.9/6.0/7.0の実行時間を実測

同じプロジェクトを型チェックすると、このマシンでは7.0.2が6.0.3の約4.4倍速でした。 各5回実行した中央値です。

条件 5.9.3 6.0.3 7.0.2
tsc --noEmit 8.33秒 8.70秒 1.96秒
tsc --noEmit --singleThreaded — — 2.71秒
tsc(JS出力あり) — 12.66秒 4.45秒
使用メモリ(--extendedDiagnostics) — 464,127K 310,853K
  • 環境:Linux、2 vCPU、Node.js 22.22.2(他の処理と同居しているため誤差があります)
  • 対象:自動生成した1,500ファイル・約36,000行(interface・ジェネリクス・クラス・再帰の型を含む)
  • 公式ブログでは実プロジェクトで7.7〜11.9倍。並列処理で速くなる設計で、型チェックの並列数は --checkers(既定4)で変えられます。

主要オプションを目的別に理解する

target と lib:出力するJSの版

target は「どの構文まで変換せずに出力するか」、lib は「どの組み込みAPIの型を使えるか」です。 lib を省略すると target に合わせて自動で決まり、ブラウザ向けに DOM を足すときだけ明示します。TS 6.0以降、dom.iterable は dom に統合されたので "lib": ["ES2023", "DOM"] で足ります。

実行環境 target の目安
最新ブラウザ+Vite es2022〜es2023(Viteテンプレートは es2023)
Node.js 20 es2023
Node.js 22以降 es2024
変換はバンドラーに任せる esnext でも可

module と moduleResolution:import の扱い

7.0で選べる moduleResolution は bundler・nodenext・node16 の3つです(tsc --help --all で確認)。module を nodenext にすると moduleResolution も自動で nodenext になります。

使い方 module moduleResolution 相対importの拡張子
Vite・Next.jsなどのバンドラー esnext / preserve bundler 省略できる
Node.jsでそのまま実行 nodenext (自動で nodenext) .js が必要

nodenext で拡張子を省くと、次のエラーになります。

src/bad.ts(1,21): error TS2835: Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean './order.js'?

ソースが .ts でも、import には出力後の .js を書くのがNode.js ESMのルールです。

厳しさを上げる3つのオプション

strict に含まれない追加チェックは、新規プロジェクトなら最初から有効にすると後から直す量が減ります。 次のコードを3つを有効にしてチェックしました。

import { Task } from "./task"; // Task は interface
const tasks: Task[] = [{ id: 1, title: "備品の発注" }];
const first = tasks[0];
console.log(first.title);
const stock: Record<string, number> = { pen: 3 };
const n: number = stock["pen"];
const t: Task = { id: 2, title: "在庫確認", note: undefined }; // note?: string
src/main.ts(1,10): error TS1484: 'Task' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.
src/main.ts(5,13): error TS18048: 'first' is possibly 'undefined'.
src/main.ts(8,7): error TS2322: Type 'number | undefined' is not assignable to type 'number'.
src/main.ts(10,7): error TS2375: Type '{ id: number; title: string; note: undefined; }' is not assignable to type 'Task' with 'exactOptionalPropertyTypes: true'. ...
オプション 見つけてくれること 直し方
noUncheckedIndexedAccess 範囲外アクセス・存在しないキー if (first) や ?? 0 で確認
exactOptionalPropertyTypes 「無い」と「undefined」の混同 プロパティ自体を書かない
verbatimModuleSyntax 型のimportが実行時に残る問題 import type { Task }

用途別テンプレート(コピペ用)

どのテンプレートもTypeScript 7.0.2で tsc を実行して確認しています(Next.jsのみ生成ファイルの転記、下記参照)。

Vite + React

create-vite 9.2.1(--template react-ts)が生成する tsconfig.app.json です。ルートの tsconfig.json は references で tsconfig.app.json と tsconfig.node.json を束ねます。

{
  "compilerOptions": {
    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
    "target": "es2023",
    "lib": ["ES2023", "DOM"],
    "module": "esnext",
    "types": ["vite/client"],
    "allowArbitraryExtensions": true,
    "skipLibCheck": true,
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "verbatimModuleSyntax": true,
    "moduleDetection": "force",
    "noEmit": true,
    "jsx": "react-jsx",
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "erasableSyntaxOnly": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["src"]
}

strict は書かれていませんが、6.0以降は既定で有効です。noUncheckedIndexedAccess: true を足すと、配列アクセスの見落としも検出できます。

Node.js(ESM、tscでビルドして実行)

package.json に "type": "module" を書いた上で使います。

{
  "compilerOptions": {
    "target": "es2024",
    "lib": ["es2024"],
    "module": "nodenext",
    "types": ["node"],
    "rootDir": "./src",
    "outDir": "./dist",
    "sourceMap": true,
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,
    "verbatimModuleSyntax": true,
    "isolatedModules": true,
    "skipLibCheck": true
  },
  "include": ["src"]
}
$ npx tsc -p . && node dist/index.js
合計数量: 7 function

ライブラリ(npm公開用、型定義つき)

{
  "compilerOptions": {
    "target": "es2022",
    "lib": ["es2022"],
    "module": "nodenext",
    "types": [],
    "rootDir": "./src",
    "outDir": "./dist",
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,
    "verbatimModuleSyntax": true,
    "skipLibCheck": true
  },
  "include": ["src"]
}

package.json は "exports": { ".": { "types": "./dist/index.d.ts", "default": "./dist/index.js" } } とします。ビルドすると dist/ に index.js・index.js.map・index.d.ts・index.d.ts.map が出力されました。利用者の環境が幅広いライブラリは target を少し低め(es2022)にしておくと安心です。

Next.js

create-next-app 16.3.7 のAppルーターテンプレートに含まれる tsconfig.json です(転記のみ。テンプレートが入れるTypeScriptは ^5)。

{
  "compilerOptions": {
    "target": "ES2017",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "react-jsx",
    "incremental": true,
    "plugins": [{ "name": "next" }],
    "paths": { "@/*": ["./*"] }
  },
  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", ".next/dev/types/**/*.ts", "**/*.mts"],
  "exclude": ["node_modules"]
}

paths が ./ 始まりで baseUrl を使っていないため、TypeScript 7.0の削除項目には当たりません。 plugins はエディタ用の言語サービスプラグインで、公式ブログによれば7.0は安定APIを未公開のため、エディタ補助は6.0系で動かす形になります。Next.jsプロジェクトを7.0で動かす検証はこの記事では行っていません。

よくある質問

Q. tsconfig.jsonを一から作るには? A. npx tsc --init を実行します。 7.0.2では module: "nodenext"・target: "esnext"・types: []・strict・noUncheckedIndexedAccess・exactOptionalPropertyTypes・verbatimModuleSyntax などが有効な状態で生成されました。Node.jsで使う場合はコメントのとおり types: ["node"] に変えます。

Q. baseUrl を消すと @/ の別名はどうなりますか? A. paths を "@/*": ["./src/*"] のように ./ 始まりで書けば、baseUrl なしで動きます。 実行時の解決はバンドラー(Vite・Next.js)か、Node.jsなら package.json の imports に任せます。

Q. 7.0でエラーが大量に出て、すぐには直せません。 A. まず "strict": false と "types": ["*"] を明示すると、5.x に近い挙動に戻せます(types: ["*"] は6.0リリースノートにある旧挙動の指定方法)。削除されたオプションは戻せないので、6.0(@typescript/typescript6)を併用しながら段階的に置き換えます。

Q. 設定が実際にどう解釈されているか確認するには? A. npx tsc --showConfig で、extendsを展開した最終的な設定を表示できます。 読み込まれたファイルは --listFiles、所要時間は --extendedDiagnostics で確認できます。

まとめ

  • TypeScript 7.0では strict・module: esnext・types: [] が既定。何も書かなくても厳格チェックになる
  • baseUrl・target: es5・moduleResolution: node10/classic・outFile などは設定するとエラー。ignoreDeprecations も効かない
  • paths は ./ 始まりで書き、実行時の別名はバンドラーか package.json の imports に任せる
  • Node.jsは nodenext+.js 拡張子、バンドラーは bundler と使い分ける
  • noUncheckedIndexedAccess・exactOptionalPropertyTypes・verbatimModuleSyntax を足すと見落としを早く見つけられる
  • 実測では7.0.2の型チェックは6.0.3の約4.4倍速(2 vCPU、1,500ファイル)
  • 移行は6.0でエラー0にしてから7.0へ上げると切り分けやすい

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「tsconfig設定一覧|TypeScript 7対応の推奨値とテンプレート」

株式会社RJCでは、新しいバージョンが出るたびに設定を実際に動かして確かめ、その結果をプロジェクトの中で仲間と共有しています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?