はじめに
この記事では、TypeScript の never型を使った網羅性チェックについて記載します。
網羅性チェックとは、ロジックがすべてのパターンを網羅しているかをコンパイラにチェックさせることです。
なお、never型の概要については、別途以下の記事で記載しています。
never型を使った網羅性チェック
ユニオン型の分岐処理時、default に never型を使って網羅性チェックができます。
sample.ts
type PaymentMethod =
| { type: "credit_card"; cardNumber: string }
| { type: "paypal"; email: string }
| { type: "bank_transfer"; accountNumber: string };
上記のユニオン型の2パターンのみ対応した分岐処理の default に never型を使うとエラーになります。
sample.ts
function processPayment(method: PaymentMethod): string {
switch (method.type) {
case "credit_card":
return `Processing credit card payment for card: ${method.cardNumber}`;
case "paypal":
return `Processing PayPal payment for email: ${method.email}`;
default:
// Exhaustive check using never
const _exhaustive: never = method;
throw new Error(`Unhandled payment method: ${_exhaustive}`);
}
}
エラーが出ることで網羅性がないことに気がつくことができます。