Menu

TypeScript 7とは?ネイティブ化の変更点と移行方法

TypeScript 7は、TypeScriptのコンパイラーをGoで書き直したネイティブ版です。約10倍速く、tscコマンドも言語も同じです。利用者にとっての変更点(新しいデフォルト、削除されたオプション、JavaScript APIの欠如)、まだTypeScript 6が必要なツール、アップグレードの手順を解説します。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

TypeScript 7は、TypeScriptのコンパイラーをGoで書き直し、ネイティブのプログラムとして提供するものです。言語は同じで、コマンドは今も tsc、npmパッケージも typescript のままです。変わるのは速度(フルビルドが約10倍速い)、いくつかの新しいデフォルト、そしてTypeScript 6で非推奨になったオプションの削除です。TypeScript 7.0は2026年7月8日にリリースされ、npmのバージョンは7.0.2です。

npm install --save-dev typescript@latest
npx tsc --version
Version 7.0.2

型レベルで目に見える数少ない違いのひとつが、テンプレートリテラル型による文字列の分割です。JavaScriptは文字列をUTF-16のコード単位で保持しており、😀のような絵文字は2つのコード単位を使います。

TypeScript 6はテンプレートリテラル型を text[0] と同じくコード単位で分割していました。TypeScript 7は [...text] と同じくコードポイント単位で分割するため、絵文字は1文字のまま残ります。

type HeadTail<S> = S extends `${infer Head}${infer Tail}` ? [Head, Tail] : never;

type Result = HeadTail<"😀abc">;
// TypeScript 7: ["😀", "abc"]
// TypeScript 6: ["\ud83d", "\ude00abc"]

TypeScriptがGoで書き直された理由

バージョン6までのTypeScriptコンパイラーは、それ自体がTypeScriptで書かれ、Node.js上で動いていました。大きなコードベースでは、ビルドが遅く、エディターの起動も遅く、メモリも多く使っていました。

Anders Hejlsbergは2025年3月11日、「A 10x Faster TypeScript」という記事でネイティブ移植を発表しました。新しいコードベースのコードネームはCorsa、JavaScriptのほうはStradaです。チームは型チェッカーを設計し直すのではなく既存のコンパイラーのコードを移植したので、新しいコンパイラーは同じルールに従い、同じエラーを報告します。TypeScript 6.0(2026年3月)はJavaScriptのコードベースの最後のリリースで、橋渡しの役割を果たしました。TypeScript 7で削除されるものをすべて非推奨にしたのです。そして2026年7月8日にTypeScript 7.0がリリースされました。

TypeScript 7はどれくらい速いか

7.0のリリース時に公開された、オープンソースプロジェクトのフルビルドの結果です。

プロジェクトTypeScript 6TypeScript 7高速化メモリ
VS Code125.7 s10.6 s11.9x5.2 GB → 4.2 GB
Sentry139.8 s15.7 s8.9x4.9 GB → 4.6 GB
Bluesky24.3 s2.8 s8.7x1.8 GB → 1.3 GB
Playwright12.8 s1.47 s8.7x1.0 GB → 0.9 GB
tldraw11.2 s1.46 s7.7x0.6 GB → 0.5 GB

これらの計測では、デフォルトの4つの型チェックワーカーが使われています。同じマシンで --checkers 8 を指定すると、メモリは増えるものの、VS Codeのビルドは7.51 s(16.7x)、tldrawは1.06 s(10.6x)になりました。

エディターも同じくらい速くなります。言語サービスはネイティブの言語サーバーとして動くようになり、VS Codeのコードベースでは、エディターを開いてからファイル内の最初のエラーが表示されるまでの時間が約17.5秒から1.3秒未満になりました。この高速化が最も効くのは、大きなコードベースでのモノレポ、CIパイプライン、エディターです。

変わらないもの

  • コマンドとパッケージ。 npm install --save-dev typescript と npx tsc です。インストール時に、npmは @typescript/typescript-linux-x64 のようなオプショナルな依存関係からプラットフォームに合ったビルド済みバイナリを選ぶので、ほかに準備することはありません。
  • 言語。 構文も、型システムも、エラーコードも同じです。
  • 結果。 リリースノートには、stableTypeOrdering フラグを有効にし、ignoreDeprecations の設定なしでTypeScript 6.0でエラーなくコンパイルできるコードは、実質的にすべてTypeScript 7.0でも同じようにコンパイルされるはずだと書かれています。

新しいデフォルト

以下のデフォルトはTypeScript 6.0で変わり、TypeScript 7でもそのままです。影響するのは、tsconfig.json で設定していないオプションだけです。

オプション新しいデフォルト古いデフォルトに頼っていた場合の影響
stricttruestrict を設定していなかったプロジェクトでも、strictなnullチェック、noImplicitAny などが有効になる
targetes2025(esnext の直前の最新バージョン)古いtargetを設定しない限り、出力にモダンな構文が残る
moduleesnextnodenext や commonjs を設定しない限り、ESモジュールが出力される
types[]インストールした @types パッケージが自動で読み込まれなくなる。"types": ["node"] を加える(["*"] で以前の動作に戻る)
rootDir./(tsconfig.json があるフォルダー)outDir を設定してソースが src にある場合、"rootDir": "./src" を設定するまで error TS5011 になる
noUncheckedSideEffectImportstrueimport "./styles.css" のような副作用importにはモジュール宣言(declare module "*.css";)が必要。通常はフレームワークの型パッケージが提供する
stableTypeOrdering常に有効で、無効にできない型は毎回同じ順序に並ぶので、エラーメッセージや .d.ts の出力がチェックの順序に左右されない

削除されたオプションと構文

TypeScript 6で非推奨になったオプションは、TypeScript 7ではエラーになります。

  • target: es5 と、ES5の出力のためだけにあった downlevelIteration。
  • moduleResolution: node(node10 とも呼ばれる)と classic。nodenext か bundler を使います。
  • module: amd、umd、system、none。
  • baseUrl(paths をtsconfigファイルからの相対パスで書く)と outFile(バンドラーを使う)。
  • esModuleInterop: false、allowSyntheticDefaultImports: false、alwaysStrict: false。この3つは常に有効です。

何を削除すればよいかはコンパイラーが正確に教えてくれます。

error TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration.
error TS5108: Option 'moduleResolution=node10' has been removed. Please remove it from your configuration.

古い構文も2つエラーになります。namespaceを表す module Foo { }(namespace Foo { } と書きます。パッケージを表す declare module "foo" は影響を受けません)と、import assertion(assert { type: "json" } は with { type: "json" } になります)です。

index.ts(2,8): error TS1540: A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.

2行目の module を namespace に変えれば直り、プログラムは 4 と表示します。

コマンドラインでは、tsconfig.json があるフォルダーで tsc file.ts を実行すると、設定を黙って無視するのではなく error TS5112 で停止するようになりました。tsc だけを実行するか、--ignoreConfig を渡してください。JSDocでチェックするJavaScriptファイルでは、TypeScript 7は型をTypeScriptに近い形で読むようになりました。@enum は認識されなくなり、値を型として使うには typeof が必要です。削除された各オプションの代わりは、tsconfigのページに載せています。

まだTypeScript 6が必要なツール

TypeScript 7.0には安定したJavaScript APIがありません。require("typescript") はバージョン情報(version と versionMajorMinor)しか返さず、ほかのツールが呼び出すコンパイラーの関数(createProgram、言語サービス)は存在しません。パッケージの typescript/unstable/* エントリーポイントは実験的なもので、代わりにはなりません。リリースノートによると、チームはTypeScript 7.1で新しい別のAPIを提供する予定です。それまでは、コンパイラーをライブラリとしてimportするものはすべてTypeScript 6を使い続けます。

  • typescript-eslint(型情報を使うlintルール)
  • Vue、Svelte、Astroのファイル向けの言語ツール、Angularのテンプレート型チェック、MDX
  • ts-node(TypeScript 7がインストールされていると起動時にクラッシュする)

これらのために、TypeScriptは互換パッケージ @typescript/typescript6 を提供しています。完全なAPIを備えたTypeScript 6と tsc6 コマンドがインストールされます。npmのエイリアスを使えば、1つのプロジェクトに両方を入れられます。ビルドはTypeScript 7が行い、typescript をimportするツールにはバージョン6が渡ります。

{
    "devDependencies": {
        "@typescript/native": "npm:typescript@^7.0.2",
        "typescript": "npm:@typescript/typescript6@^6.0.2"
    }
}

npm install のあとは次のようになります。

$ npx tsc --version
Version 7.0.2
$ npx tsc6 --version
Version 6.0.3

これらのツールを使っていなければ、普通の typescript をインストールするだけでよく、この設定は不要です。

新しいコマンドラインオプション

ネイティブコンパイラーは、パース、チェック、出力を並列に行います。それを制御する新しいフラグが3つあり、リリースノートでは --checkers と --builders は実験的とされています。

フラグ役割
--checkers Nプロジェクトごとの型チェックワーカーの数(デフォルトは4)。コア数の多いマシンでは増やすと効果があることがあり、そのぶんメモリを使う。小さなCIランナーには少なめが向いている。
--builders Nプロジェクト参照の --build で同時にビルドするプロジェクトの数。--checkers と掛け算になり、4 builderと4 checkerなら16個のcheckerが同時に動くことがある。
--singleThreaded並列処理をすべて無効にする。デバッグやメモリの制限が厳しい場合に使う。

--watch も、Parcelバンドラーのファイルウォッチャーを移植したGo版で書き直されました。

エディターのサポート

VS Code向けには、TypeScriptチームが専用のTypeScript 7拡張機能を公開しています。インストールするとそれがデフォルトになり、コマンドパレットの「Disable TypeScript 7 Language Server」でTypeScript 6に戻せます。最新のVisual Studioはワークスペースに応じてTypeScript 7を自動で有効にし、ほかのエディター(Neovim、Zed、Sublime Text、Emacs)はLanguage Server Protocolで接続します。Vue、Svelte、Astro、MDXのファイルやAngularのテンプレートを使うプロジェクトは、それらのツールが使えるAPIをTypeScript 7が公開するまで、TypeScript 6ベースのエディターサポートを使い続けます。Angularのプロジェクトでも、プロジェクト全体の高速なチェックにはTypeScript 7の tsc を使えます。

TypeScript 7へのアップグレード方法

  1. まずTypeScript 6にアップグレードする(5.xを使っている場合): npm install --save-dev typescript@6。報告される非推奨エラーは、"ignoreDeprecations": "6.0" で黙らせるのではなく、すべて修正します。
  2. TypeScript 6で "stableTypeOrdering": true を有効にし、それによって変わる部分を修正します。チームが7でも同じようにコンパイルされると明言しているのはこの設定です。
  3. デフォルトが変わったオプションを設定する(古い値に依存していた場合)。たとえば "types": ["node"] や "rootDir": "./src" です。
  4. TypeScript 7をインストールする: npm install --save-dev typescript@latest。その後、stableTypeOrdering は削除してもかまいません。7では常に有効です。
  5. ツールを確認する。 typescript-eslint、ts-node、テンプレートの型チェックがあるフレームワークを使っているなら、上で示したTypeScript 6のエイリアスを設定します。
  6. npx tsc --version でバージョンを確認し、CIが更新したロックファイルからインストールしていることを確かめます。

tsgoとプレビュー版

リリース前、ネイティブコンパイラーは @typescript/native-preview として公開されていて、JavaScript版の tsc と並べて試せるよう、コマンド名は tsgo でした。2025年から2026年初めの記事では tsgo と書かれています。7.0でその名前は普段使われなくなりました。ネイティブコンパイラーは tsc になり、ナイトリービルドは typescript@next(現在は7.1の開発版)として公開されています。

よくある質問

TypeScript 7とは何ですか?

TypeScript 7は、TypeScriptのコンパイラーをGoで書き直し、Node.js上のJavaScriptとして動かすのではなくネイティブのプログラムとしてコンパイルした最初のリリースです。同じ言語を同じ tsc コマンドで型チェックし、リリースノートによると、フルビルドはTypeScript 6より通常8倍から12倍速くなっています。2026年7月8日にリリースされました。

TypeScript 7はGoで書かれていますか?

はい。コンパイラーと言語サービスはTypeScriptからGoに移植されました(このプロジェクトのコードネームはCorsa、JavaScriptのコードベースはStradaです)。インストールは今までどおりnpmの typescript パッケージからで、npmがOSとCPUに合ったビルド済みのネイティブバイナリを選びます。

TypeScript 7のためにコードを変更する必要はありますか?

コードはたいてい変更不要ですが、設定は変更が必要なことがあります。TypeScript 7では6.0で非推奨になったオプション(target: es5、moduleResolution: node、baseUrl、outFile など)が削除され、strict: true や types: [] などのデフォルトが変わりました。stableTypeOrdering を有効にし、ignoreDeprecations なしでTypeScript 6.0でエラーなくコンパイルできるコードは、同じようにコンパイルされるはずです。

tsgoとは何ですか?

tsgo は、7.0のリリース前にnpmパッケージ @typescript/native-preview として公開されていたネイティブコンパイラーのプレビュー版のコマンド名です。TypeScript 7では、ネイティブコンパイラーは単に typescript パッケージの tsc になり、ナイトリービルドは typescript@next で提供されます。

typescript-eslintはTypeScript 7で動きますか?

直接は動きません。TypeScript 7.0には安定したJavaScript APIがなく、typescript-eslint、ts-node、Vue、Svelte、AngularのテンプレートチェッカーなどのツールはそのAPIを呼び出しているからです。それらのためには @typescript/typescript6 パッケージ(npmのエイリアス)でTypeScript 6を残しておき、ビルドにはTypeScript 7の tsc を使います。TypeScriptチームは、TypeScript 7.1で新しい別のAPIを提供する予定だとしています。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める