TypeScript
においてnever
型を使ってswitch
文の網羅性を保証する
union
型に対してswich文を使う場合は、網羅性の保証が重要となります。
網羅性の保証方法として、default
句にnever
型を代入する方法があります。
never
型は「値を持たない」を意味するTypeScriptの特別な型です。
詳しくはhttps://typescriptbook.jp/reference/statements/never
簡単に言い換えると「あり得ない」ことを表す型です。
こちらがサンプル実装となります。
type Sample = "A" | "B;
function testFunc(sample: Sample): void {
switch (sample) {
case "A":
console.log(sample);
break;
case "B":
console.log(sample);
break;
default:
// 網羅性をチェック
const _: never = sample;
}
}
このコードがビルドに成功するということはTypeScript
の型検査器によって「このdefault
節が実行されることはあり得ない」と結論付けられたということを意味しています。つまり、全てのパターンが網羅されているということになります。
(たとえば、 case “B”:
のコードを消すとエラーになります。)
この方法を取ることにより、Union
型のすべてのパターンに対して漏れなく処理が書かれていることを保証することができます。
将来Union
型に新しい型が追加されたときに、それに対応する処理が書かれていることを保証することができます。
参考
Tags: