TypeScript 5.3〜5.4:新しいナローイングとNoInfer
NoInferユーティリティと新しいswitch/caseのナローイングを適用します。
「TypeScript 5.3〜5.4:新しいナローイングとNoInfer」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。
TypeScript 5.3 の概要
TypeScript 5.3(2023 年 11 月リリース)では、switch/case 文の型の絞り込みが改善され、JSDoc の import type のサポートと import type での解決モードが追加されました。
// npm install typescript@5.3Switch/Case の型の絞り込みの改善
TS 5.3 では、switch 文内での型の絞り込みが改善されました。特に、複数のケースを持つ判別可能な共用体で効果を発揮します。
type Result = { status: "ok"; data: string } | { status: "err"; code: number };
function handle(r: Result) {
switch (r.status) {
case "ok":
console.log(r.data); // r: { status: "ok"; data: string } — narrowed
break;
case "err":
console.log(r.code); // r: { status: "err"; code: number } — narrowed
break;
}
}JSDoc の import type
TS 5.3 では、JavaScript ファイルで型のみをインポートするための @import JSDoc タグがサポートされました。
/** @import { User } from "./types.js" */
/** @param {User} user */
function greet(user) {
console.log(user.name);
}import type の resolution-mode
TS 5.3 では、import type に resolution-mode を指定して、インポートを CommonJS として解決するか ESM として解決するかを制御できます。
import type { User } from "some-library" with { "resolution-mode": "require" };TypeScript 5.4 の概要
TypeScript 5.4(2024 年 3 月リリース)では、NoInfer ユーティリティ型、クロージャー内で維持される型の絞り込み、Object.groupBy と Map.groupBy の型が導入されました。
// npm install typescript@5.4NoInfer<T> ユーティリティ型
NoInfer は、TypeScript がジェネリック引数を推論元として使用するのを防ぎ、他の引数だけから型を推論するようにします。
function createStore<T>(initial: T, onChange: (val: NoInfer<T>) => void) {
// T inferred from initial, not from onChange callback
}
createStore({ count: 0 }, (val) => {
// val: { count: number } — inferred from initial only
});NoInfer が重要な理由
NoInfer がない場合、TypeScript は両方の引数から T を推論しようとするため、予期せず型が拡大される可能性があります。
// Before NoInfer: T may be widened by the callback
function createStore<T>(initial: T, onChange: (val: T) => void) {}
createStore({ count: 0 }, (val: { count: number; extra: string }) => {});
// T widened to include extra — not what we wantクロージャー後も維持される型の絞り込み
TS 5.4 では、クロージャーの後で絞り込まれた変数に代入が行われない場合、クロージャー内での型の絞り込みが維持されます。
function process(val: string | null) {
if (!val) return;
// val: string
setTimeout(() => {
console.log(val.toUpperCase()); // TS 5.4: still string — not widened
}, 100);
}Object.groupBy の型定義
TS 5.4 では、ES2024 の静的メソッドである Object.groupBy と Map.groupBy の型が追加されました。
const users = [
{ name: "Alice", role: "admin" },
{ name: "Bob", role: "user" },
];
const grouped = Object.groupBy(users, (u) => u.role);
// grouped: { [role: string]: { name: string; role: string }[] }宣言ファイル出力の改善
TS 5.4 では、mapped type や conditional type を含む複雑なケースでの宣言ファイル出力が改善され、生成された .d.ts ファイルでの誤ったエラーが減少しました。
// Fewer "Type ... is not assignable to type ..." errors
// in generated declaration files from TS 5.4 onwardまとめ: TS 5.3-5.4
TS 5.3: switch/case の型の絞り込みの改善、JSDoc の @import サポート。TS 5.4: 型の望ましくない推論元を防ぐ NoInfer、クロージャー内で維持される型の絞り込み、Object.groupBy の型。
理解度チェック
NoInfer は何を防ぎますか?
学んだこと
TS 5.3 では switch/case の型の絞り込みが改善され、JSDoc の import type が追加されました。TS 5.4 では、推論元を制御する NoInfer、クロージャーをまたいで維持される型の絞り込み、ES2024 の Object.groupBy の型が導入されました。
よくある質問
「TypeScript 5.3〜5.4:新しいナローイングとNoInfer」レッスンは無料ですか?
はい。「TypeScript 5.3〜5.4:新しいナローイングとNoInfer」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。
「TypeScript 5.3〜5.4:新しいナローイングとNoInfer」で何を学びますか?
NoInferユーティリティと新しいswitch/caseのナローイングを適用します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「TypeScript 5.3〜5.4:新しいナローイングとNoInfer」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- TypeScript 5.0:標準デコレーターとconst型パラメーター
- TypeScript 5.1〜5.2:推論の改善
- TypeScript 5.3〜5.4:新しいナローイングとNoInfer
- TypeScript 5.5以降:Isolated Declarationsとその先