TypeScript 5.7とは
TypeScript 5.7は、型安全性とエディタ体験をさらに向上させるアップデートです。初期化前の変数使用を検出する新機能や、ESモジュールのパスサポートが強化されました。
主な新機能
1. 初期化されていない変数のチェック
条件分岐内で初期化されていない可能性のある変数を検出できるようになりました。
// TypeScript 5.7以前は警告なし
function example(condition: boolean) {
let value: string;
if (condition) {
value = 'initialized';
}
// 5.7: Error! 'value' is possibly not initialized
console.log(value);
}
// 正しい書き方
function exampleFixed(condition: boolean) {
let value: string;
if (condition) {
value = 'initialized';
} else {
value = 'default';
}
console.log(value); // OK
}
2. 相対パスでのインポート書き換え
--rewriteRelativeImportExtensionsオプションで、.tsを.jsに自動変換できます。
// src/utils.ts
export function helper() {
return 'hello';
}
// src/index.ts
// 入力
import { helper } from './utils.ts';
// 出力(コンパイル後)
import { helper } from './utils.js';
// tsconfig.json
{
"compilerOptions": {
"rewriteRelativeImportExtensions": true,
"module": "NodeNext",
"moduleResolution": "NodeNext"
}
}
3. --target es2024と--lib es2024
ES2024の新機能が完全サポートされました。
// Object.groupBy
const inventory = [
{ name: 'apple', type: 'fruit' },
{ name: 'banana', type: 'fruit' },
{ name: 'carrot', type: 'vegetable' },
];
const grouped = Object.groupBy(inventory, item => item.type);
// { fruit: [...], vegetable: [...] }
// Promise.withResolvers
const { promise, resolve, reject } = Promise.withResolvers<string>();
setTimeout(() => resolve('done'), 1000);
const result = await promise; // 'done'
// ArrayBuffer.prototype.transfer
const buffer = new ArrayBuffer(8);
const transferred = buffer.transfer();
console.log(buffer.byteLength); // 0 (detached)
console.log(transferred.byteLength); // 8
4. 検索パスのパフォーマンス改善
node_modules探索のキャッシュが改善され、大規模プロジェクトでの型チェックが高速化されました。
| プロジェクト規模 | 5.6 | 5.7 | 改善率 |
|---|---|---|---|
| 小規模(100ファイル) | 基準 | 5% 高速 | +5% |
| 中規模(1000ファイル) | 基準 | 15% 高速 | +15% |
| 大規模(10000ファイル) | 基準 | 25% 高速 | +25% |
5. --noCheckオプション
型チェックをスキップしてトランスパイルのみ実行できます。
# 型チェックなしでコンパイル(高速)
tsc --noCheck
# CI/CDでの使用例
# 1. 型チェック
tsc --noEmit
# 2. トランスパイル(型チェック済みなのでスキップ)
tsc --noCheck
6. 検証付きJSONインポート
JSONインポートの型が厳密になりました。
// data.json
{
"name": "TypeScript",
"version": "5.7"
}
// main.ts
import data from './data.json' with { type: 'json' };
// 型が推論される
console.log(data.name); // string
console.log(data.version); // string
console.log(data.notExist); // Error! Property 'notExist' does not exist
コード品質向上の新ルール
より厳密なnullチェック
// strictNullChecks: true との組み合わせで効果的
function processUser(user: User | null) {
// 5.7: より正確なナローイング
if (user !== null && user !== undefined) {
// user は User 型として扱われる
console.log(user.name);
}
}
ジェネリクスの改善
// より正確な型推論
function createPair<T, U>(first: T, second: U) {
return [first, second] as const;
}
const pair = createPair('hello', 42);
// 型: readonly ["hello", 42]
アップグレード方法
インストール
# npm
npm install -D typescript@5.7
# pnpm
pnpm add -D typescript@5.7
# yarn
yarn add -D typescript@5.7
tsconfig.json更新
{
"compilerOptions": {
"target": "ES2024",
"lib": ["ES2024", "DOM"],
"module": "NodeNext",
"moduleResolution": "NodeNext",
"strict": true,
"rewriteRelativeImportExtensions": true
}
}
破壊的変更
1. 初期化チェックの厳密化
既存コードで新しいエラーが発生する可能性があります。
// 修正が必要な例
let result: string;
try {
result = riskyOperation();
} catch {
// result が初期化されていない
}
console.log(result); // Error!
// 修正後
let result: string | undefined;
try {
result = riskyOperation();
} catch {
result = undefined;
}
if (result !== undefined) {
console.log(result);
}
2. lib.d.ts の更新
一部のDOM型定義が変更されています。
// 変更例
// 以前: EventTarget.addEventListener のシグネチャが変更
// 新しい型定義を確認してください
VS Code統合
// settings.json
{
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true
}
TypeScript 5.x リリース履歴
| バージョン | リリース日 | 主な機能 |
|---|---|---|
| 5.7 | 2025-01 | 初期化チェック、パス書き換え |
| 5.6 | 2024-09 | Iterator helpers |
| 5.5 | 2024-06 | 推論改善 |
| 5.4 | 2024-03 | NoInfer型 |
| 5.3 | 2023-11 | Import属性 |
まとめ
TypeScript 5.7は、より安全で快適な開発体験を提供します。
- 初期化チェック: 未初期化変数の使用を防止
- パス書き換え: ESMインポートの自動変換
- ES2024サポート: 最新JavaScript機能の型定義
- パフォーマンス: 大規模プロジェクトで最大25%高速化
既存プロジェクトは破壊的変更に注意しながらアップグレードを検討してください。
← 一覧に戻る