TypeScript 7.0が正式公開された。既存実装をGoへ移植したネイティブコンパイラで、共有メモリ並列処理と最適化によりフルビルドでおおよそ8〜12倍の速度向上を狙う。型チェックの意味論はTypeScript 6.0と構造的に同一とされ、stableTypeOrdering を有効にし ignoreDeprecations を使わない6.0で通るコードは7.0でも同様に通る想定である。

sh
npm install -D typescript

大規模OSSでのフルビルド比較は次のとおり(既定の --checkers 4)。

CodebaseTypeScript 6TypeScript 7Speedup
vscode125.7s10.6s11.9x
sentry139.8s15.7s8.9x
bluesky24.3s2.8s8.7x
playwright12.8s1.47s8.7x
tldraw11.2s1.46s7.7x

メモリ使用量もコードベースにより数%〜二十数%程度の削減が示されている。VS Codeコードベースでは、エディタ起動から最初のエラー表示までが約17.5秒から1.3秒未満へ短縮された。

安定版のプログラムAPIは7.1以降の見込みのため、typescript-eslintなど typescript を直接 import するツールは6.0との併用が想定される。互換パッケージ @typescript/typescript6tsc6 と6.0 APIを提供し、npmエイリアスで並べて入れられる。

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

パース・型チェック・emitを並列化する。型チェックワーカー数は --checkers(既定4)、プロジェクト参照の並列ビルドは --builders で調整でき、デバッグ向けに --singleThreaded もある。--watch はParcel由来のファイルウォッチャをGoへ移植した基盤に載せ替えられた。ナイトリーは今後 typescript@next へ移行し、これまで使われていた @typescript/native-preview から切り替わる。

6.0で導入された既定値と非推奨化が7.0では本格適用される。strict 既定が truemoduleesnexttypes が空配列、stableTypeOrdering が常時有効などが中心で、target: es5moduleResolution: node / classicbaseUrl などはエラーになる。rootDirtypes の変更が移行で影響しやすい。

json
{
  "compilerOptions": {
    "rootDir": "./src",
    "types": ["node", "jest"]
  },
  "include": ["./src"]
}

テンプレートリテラル型の推論はUnicodeコードポイント単位になり、絵文字 "😀" がサロゲートペア2つに分割されなくなる。JSDocベースのJavaScript解析もTypeScriptファイルに近い規則へ整理され、@enum の特別扱いやClosure風関数記法などは廃止方向にある。

エディタ向けにはLSP基盤のGoコンパイラが使われ、VS CodeではTypeScript 7専用拡張が既定の言語サービスになる。一方、安定API未提供のため Vue / MDX / Astro / Svelte や Angular のテンプレート型チェックなど埋め込み用途は当面6.0側に残る。

#参考文献