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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- typeof、等価性、truthinessによる絞り込み
- in、instanceof、判別可能なunion
- neverによる網羅性チェック(入門)