4月26日、TypeScriptチームはTypeScript 5.5 Betaを公開した。
以下のように数多くの新機能が導入されている。
- 推論される型述語
- 定数インデックスアクセスのための制御フローの絞り込み
- JSDoc内の型インポート
- 正規表現の構文チェック
- 分離された宣言
- 設定ファイルのための${configDir}テンプレート変数
- package.jsonの依存関係に基づく宣言ファイル生成
- エディタとウォッチモードの信頼性向上
- パフォーマンスとサイズの最適化
- ECMAScriptモジュールのAPI利用の容易化
- transpileDeclaration API
- 注目すべき挙動の変更
以下に、これらの新機能に関する簡単な説明を示す。
型述語の推論が可能に
TypeScript 5.5では、コードの文脈に応じた型推論がより進化し、メソッドチェーン内のfilter関数の戻り値の型などを正確に絞り込めるようになった。
interface Bird {
commonName: string;
scientificName: string;
sing(): void;
}
declare const nationalBirds: Map<string, Bird>;
function makeBirdCalls(countries: string[]) {
// Mapを走査してundefinedなBirdを除去
const birds = countries
.map(country => nationalBirds.get(country))
.filter(bird => bird !== undefined); // undefinedを除いている
for (const bird of birds) {
// 5.5以前は「'bird' はundefinedの可能性があります」としてエラーに
bird.sing();
}
}
定数インデックスアクセスのための制御フローの絞り込み
オブジェクトにキーを用いてアクセスする際、より精密な型絞り込みが可能になる。
function f1(obj: Record<string, unknown>, key: string) {
// 以前はエラーになったが、5.5以降はOK
if (typeof obj[key] === "string") {
obj[key].toUpperCase();
}
}
JSDoc内の型インポート
JSDocコメント内での型インポートが容易になり、@import
タグを使用することで、ESModulesのインポート構文を模倣する。以下はその使用例である。
/** @import { SomeType } from "some-module" */
/**
* @param {SomeType} myValue
*/
function doSomething(myValue) {
// 関数の実装
}
正規表現の構文チェック
TypeScriptは、正規表現リテラルに対して基本的な構文チェックを行うようになり、一般的なエラーを検出可能に。以下の例では、正規表現の誤りを指摘している。
let myRegex = /@robot(\s+(please|immediately)))? do some task/;
// ~
// error!
// Unexpected ')'. Did you mean to escape it with backslash?
--isolatedDeclarationsオプション
新たな--isolatedDeclarations
オプションが導入され、より高速で並列なビルドプロセスを支援する。これは、特に大規模なプロジェクトやモノレポでの開発において、ビルド時間の短縮に貢献する。
設定ファイルのための${configDir}テンプレート変数
tsconfig.json
のextends
フィールドで使用されるパスが、新しいテンプレート変数${configDir}
によって、より柔軟に扱えるようになる。これにより、複数のプロジェクト間で設定ファイルを再利用する際の管理が容易になる。
package.jsonの依存関係に基づく宣言ファイル生成
package.json
のdependencies
に基づいて、より安全に型宣言ファイルを生成することが可能になった。これは、モジュールの解決が改善された結果である。
ECMAScriptモジュールのAPI利用の容易化
Node.jsでのECMAScriptモジュールからTypeScriptのAPIを名前付きインポートで利用できるようになり、開発者の利便性が向上した。
transpileDeclaration API
transpileModule
に類似した新しいAPI transpileDeclaration
が導入された。これにより、宣言ファイルの生成が容易になる。
注目すべき挙動の変更
いくつかの機能が非推奨となり、将来的には使用できなくなる予定である。また、ESMとCommonJSの取り扱いに関しても改善が加えられた。
以上の更新により、TypeScriptの利用者はより効率的かつ安全にコードを書くことができるようになるだろう。詳細はAnnouncing TypeScript 5.5 Betaを参照していただきたい。