TypeScript 5.7 - 型安全性の新境地

2025.01.21

TypeScript 5.7とは

TypeScript 5.7は、型安全性とエディタ体験をさらに向上させるアップデートです。初期化前の変数使用を検出する新機能や、ESモジュールのパスサポートが強化されました。

参考: Announcing TypeScript 5.7

主な新機能

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.65.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.72025-01初期化チェック、パス書き換え
5.62024-09Iterator helpers
5.52024-06推論改善
5.42024-03NoInfer型
5.32023-11Import属性

まとめ

TypeScript 5.7は、より安全で快適な開発体験を提供します。

  • 初期化チェック: 未初期化変数の使用を防止
  • パス書き換え: ESMインポートの自動変換
  • ES2024サポート: 最新JavaScript機能の型定義
  • パフォーマンス: 大規模プロジェクトで最大25%高速化

既存プロジェクトは破壊的変更に注意しながらアップグレードを検討してください。

この技術を体系的に学びたいですか?

未来学では東証プライム上場企業のITエンジニアが24時間サポート。月額24,800円から、退会金0円のオンラインIT塾です。

LINEで無料相談する
← 一覧に戻る