0Pricing
TypeScript Academy · レッスン

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.3

Switch/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.4

NoInfer<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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. TypeScript 5.0:標準デコレーターとconst型パラメーター
  2. TypeScript 5.1〜5.2:推論の改善
  3. TypeScript 5.3〜5.4:新しいナローイングとNoInfer
  4. TypeScript 5.5以降:Isolated Declarationsとその先
← TypeScript Academyに戻る