TypeScript 2025年の進化
2025年はTypeScriptがESモジュール(ESM)を完全に採用した年です。新規プロジェクトはデフォルトでESMになり、Node.js、Deno、ブラウザとの相互運用性が向上しました。
ECMAScript 2025 標準化
2025年6月25日、第129回ECMA総会でECMAScript 2025(ES2025)が正式承認されました。ECMA-262標準の第16版となります。
ES2025の主要機能
// Iterator Helpers(ES2025)
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.values()
.filter(n => n % 2 === 0)
.map(n => n * 2)
.toArray();
// [4, 8]
// TypeScript 5.6でIteratorObjectインターフェースを導入
// ES2025のIteratorクラスとの名前衝突を解決
TypeScript 5.x シリーズの進化
TypeScript 5.7(2024年11月)
// 改善された型推論
const config = {
port: 3000,
host: "localhost"
} as const satisfies Config;
// より厳密な型チェック
function process(value: string | null) {
if (value !== null) {
// valueは自動的にstring型に絞り込み
console.log(value.toUpperCase());
}
}
TypeScript 5.8(2025年3月)
// 改善されたconditional型
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
// より高速なエディタサポート
// プロジェクト参照の改善
TypeScript 5.9(最新)
// Deferred Module Evaluation(ES提案)
import defer * as utils from "./utils.js";
// utilsは遅延評価され、実際に使用されるまで実行されない
function processData() {
// この時点でutilsモジュールが初めて評価される
return utils.transform(data);
}
TypeScript 5.0 からの主な変更
デコレータ標準化
// ECMAScript標準のデコレータ
function logged(target: any, context: ClassMethodDecoratorContext) {
return function (...args: any[]) {
console.log(`Calling ${String(context.name)}`);
return target.apply(this, args);
};
}
class Calculator {
@logged
add(a: number, b: number): number {
return a + b;
}
}
constタイプパラメータ
// constによる推論の制御
function createPair<const T extends readonly [unknown, unknown]>(
pair: T
): T {
return pair;
}
const result = createPair(["hello", 42] as const);
// 型: readonly ["hello", 42]
verbatimModuleSyntax
// モジュール構文の厳密化
import type { User } from "./types"; // 型のみのインポート
import { processUser } from "./utils"; // 値のインポート
ESM完全移行
2025年、TypeScriptプロジェクトはrequire/module.exportsからimport/exportへ完全移行。
// tsconfig.json(2025年推奨設定)
{
"compilerOptions": {
"target": "ES2024",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"verbatimModuleSyntax": true,
"strict": true,
"skipLibCheck": true
}
}
// ESMスタイル
import { readFile } from "node:fs/promises";
import path from "node:path";
export async function loadConfig(configPath: string) {
const fullPath = path.resolve(configPath);
const content = await readFile(fullPath, "utf-8");
return JSON.parse(content);
}
TypeScript 7: Goによる再実装
衝撃的な発表として、TypeScriptランタイムがGo言語で完全に書き直されることが予定されています。
期待される改善
ビルド速度: 最大10倍高速化
メモリ使用量: 大幅削減
IDE応答性: 劇的な向上
TypeScript 5.0での基盤作り
・名前空間からモジュールへの移行
・一部プロジェクトで最大81%のビルド時間短縮
・パッケージサイズの削減
実践的な設定例
Next.js + TypeScript
// tsconfig.json
{
"compilerOptions": {
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{ "name": "next" }
]
}
}
Node.js バックエンド
// tsconfig.json
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"declaration": true,
"sourceMap": true
}
}
移行ガイド
5.0への移行
# アップグレード
npm install typescript@latest
# 自動移行ツール
npx @typescript/migrate
チェックリスト
□ moduleResolutionを"bundler"または"NodeNext"に更新
□ デコレータを新しい標準構文に移行
□ verbatimModuleSyntaxの有効化を検討
□ 型のみのインポートにtype修飾子を追加
まとめ
2025年のTypeScriptは、ECMAScript標準との密接な連携、ESMへの完全移行、そして将来のGo実装による大幅な高速化など、言語とツールチェーンの両面で進化を続けています。エコシステムの成熟により、フロントエンドからバックエンドまで、TypeScriptはモダンなJavaScript開発の標準となりました。
← 一覧に戻る