0Pricing
TypeScript Academy · レッスン

neverによる網羅性チェック(入門)

neverを使ってunionに対するswitchの網羅性を保証し、抜けているケースを早期に検出します

「neverによる網羅性チェック(入門)」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全3レッスンが含まれています。

導入

目標:switchですべてのユニオンメンバーを処理できるようにします。never型を使うと、新しいケースの処理が抜けたときにコンパイラーが知らせてくれます。

ユニオンの準備

後でswitchの対象にできるよう、リテラルタグ(例:kind)を持つ判別ユニオンを作成します。

type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };

type Shape = Circle | Square;

網羅的でないswitch

分岐が1つ欠けていてもコンパイルは通りますが、ロジックは不完全です。ケースが欠けているときにコンパイル時エラーを強制する方法が必要です。

function areaBad(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius ** 2;
    // OOPS: forgot "square" -> no compile error yet
  }
  return 0; // silently wrong
}

console.log(areaBad({ kind: "circle", radius: 2 }));

assertNeverヘルパー

assertNeverを定義します。この関数はneverだけを受け取ります。値がここに到達した場合、switchが網羅的ではないため、コンパイラーが指摘します。

function assertNever(x: never): never {
  throw new Error("Unhandled case: " + JSON.stringify(x));
}

網羅的なswitch

assertNeverを呼び出すdefaultを追加します。新しいユニオンメンバーが追加されると、コンパイラーによって処理が強制されます。

function area(s: Shape): number {
  switch (s.kind) {
    case "circle":
      return Math.PI * s.radius ** 2;
    case "square":
      return s.size * s.size;
    default:
      return assertNever(s); // compiler error if a member is unhandled
  }
}

console.log(area({ kind: "square", size: 3 }));

ガイドライン

ガイドライン:

  • ユニオンメンバーには、kindのような判別子を付けます。
  • default + assertNeverパターンを維持します。
  • 不足しているケースが明確になるよう、わかりやすい戻り値の型を優先します。

網羅性の確認

確認問題:判別ユニオンに対するswitchを網羅的にするには、どうすればよいですか?

まとめ

まとめ:neverは不可能な値を示します。default分岐でassertNeverを使用すると、将来の変更にも対応できる完全なswitchを強制できます。

よくある質問

「neverによる網羅性チェック(入門)」レッスンは無料ですか?

はい。「neverによる網羅性チェック(入門)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全3レッスンが含まれています。

「neverによる網羅性チェック(入門)」で何を学びますか?

neverを使ってunionに対するswitchの網羅性を保証し、抜けているケースを早期に検出します ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。

「neverによる網羅性チェック(入門)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. typeof、等価性、truthinessによる絞り込み
  2. in、instanceof、判別可能なunion
  3. neverによる網羅性チェック(入門)
← TypeScript Academyに戻る