10月10日、MicrosoftはTypeScript 5.7 Betaを発表した。今回のリリースは、開発者がより効率的かつ柔軟にコードを書けるようになる多くの新機能や改善が盛り込まれている。
以下にTypeScript 5.7の主要な新機能と改良点を詳しく見ていく。
初期化されていない変数のチェック機能
TypeScriptは、変数が初期化されていない状態で使用されるとエラーを報告できる機能を以前から持っていたが、TypeScript 5.7ではこの機能がさらに強化された。特に、関数内で変数が初期化されていない場合、これまではエラーが出ないケースもあったが、今回のバージョンではそれもキャッチするようになった。以下のコードでこの動作を確認できる。
function foo() {
let result: number;
if (someCondition()) {
result = doSomeWork();
} else {
let temporaryWork = doSomeWork();
temporaryWork *= 2;
// resultに代入し忘れ
}
printResult();
function printResult() {
console.log(result); // エラー: 変数 'result' は使用前に割り当てられていません。
}
}
この強化されたチェック機能により、初期化漏れによるバグを未然に防ぐことができる。
相対パスの書き換え
TypeScript 5.7では、--rewriteRelativeImportExtensions
という新しいコンパイラオプションが導入された。これにより、相対パスでインポートしたTypeScriptファイルが、コンパイル時にJavaScriptの拡張子に適切に変換されるようになった。
例えば、次のコードはNode.jsの実験的機能を使ってTypeScriptファイルを直接実行できるが、コンパイル時にはJavaScriptファイルとして扱われる。
// main.ts
import * as foo from "./foo.ts"; // コンパイル時には "./foo.js" へ書き換えられる
この機能は、TypeScriptコードをそのまま実行しつつ、後でJavaScriptファイルとしてコンパイルして配布するライブラリ作者にとって特に便利だ。
--target es2024
と--lib es2024
のサポート
TypeScript 5.7では、ECMAScript 2024をターゲットにした--target es2024
と--lib es2024
がサポートされた。これにより、SharedArrayBuffer
やObject.groupBy
などの新しい機能が使えるようになった。特に、Promise.withResolvers
やAtomics.waitAsync
のサポートも追加され、非同期処理や並行処理がさらに強化されている。
プロジェクト所有権の高速チェックとコンポジットプロジェクト
複数のプロジェクトが相互に参照するような大規模なコードベースにおいて、TypeScript 5.7ではプロジェクト所有権のチェックが大幅に高速化された。これにより、エディタでファイルを開く際の速度が向上し、開発効率が向上する。
例えば、以下のような複雑なプロジェクト構成においても、ファイルの所属プロジェクトがより迅速に特定されるようになった。
packages/
├── graphics/
│ ├── tsconfig.json
│ └── src/
├── sound/
│ ├── tsconfig.json
│ └── src/
└── app/
├── tsconfig.json
├── some-script.js
└── src/
この改善により、大規模プロジェクトでの開発がよりスムーズになるだろう。
Node.jsにおけるV8コンパイルキャッシュのサポート
Node.js 22の新機能として導入されたmodule.enableCompileCache()
APIを利用し、TypeScript 5.7ではNode.js内でのコンパイル速度が大幅に向上した。このAPIにより、初回実行後のパースおよびコンパイル作業の一部がキャッシュされ、次回以降の実行で再利用される。
TypeScriptチームのテストでは、tsc --version
コマンドの実行速度が約2.5倍速くなったという。
Benchmark 1: node ./built/local/_tsc.js --version (*without* caching)
Time (mean ± σ): 122.2 ms ± 1.5 ms [User: 101.7 ms, System: 13.0 ms]
Benchmark 2: node ./built/local/tsc.js --version (*with* caching)
Time (mean ± σ): 48.4 ms ± 1.0 ms [User: 34.0 ms, System: 11.1 ms]
開発者にとっては、TypeScriptのビルド時間が大幅に短縮されるため、開発プロセスの効率が大きく向上する。
--module nodenext
でのJSONインポートの検証
--module nodenext
モジュールオプションを使用する際、TypeScriptはJSONファイルをインポートする際に、ランタイムエラーを防ぐための厳密な検証を行うようになった。具体的には、type: "json"
というインポート属性を指定する必要がある。
import myConfig from "./myConfig.json" with { type: "json" };
これにより、JSONファイルの取り扱いがより安全になり、開発者は不意のエラーを防ぎやすくなる。
TypedArrayがArrayBufferLike
に対してジェネリック化
今回のバージョンでは、TypedArrayがArrayBufferLike
に対してジェネリック化された。これにより、Uint8Array
やInt32Array
などの型が柔軟に使えるようになり、特定のバッファタイプに縛られずにTypedArrayを扱うことができる。
まとめ
TypeScript 5.7 Betaは、新機能と改善によって開発者にとって大きな価値を提供するリリースだ。特に、初期化されていない変数のチェックや、Node.jsにおけるV8コンパイルキャッシュのサポートは、バグを防ぎつつ、開発効率を向上させる強力なツールとなっている。TypeScript 5.7の新機能を活用し、さらなる開発の加速が期待できる。
詳細はAnnouncing TypeScript 5.7 Betaを参照していただきたい。
記事を投稿いただきありがとうございます!
に関してですが、記載されている例では5.7のbeta版でもエラーにならないと思うのですがいかがでしょうか?
https://zenn.dev/yuya333/articles/95a5595946e92c