複雑な型定義をせずとも、switch 文の default 節で never 型の値に代入したり never 型を引数にとる関数に渡したりすることで網羅チェックをするテクニックが知られていますね。
typeAnimal="Cat"|"Dog"|"Penguin";// "Penguin" を加えたconst say =(animal: Animal):string=>{switch(animal){case"Cat":return"Meow";case"Dog":return"Bow";// case "Penguin": が抜けているdefault:const _:never= animal;// Type 'string' is not assignable to type 'never' .}};
Discussion
複雑な型定義をせずとも、switch 文の default 節で never 型の値に代入したり never 型を引数にとる関数に渡したりすることで網羅チェックをするテクニックが知られていますね。
コメントありがとうございます、勉強になりました。本文の方も編集させていただきました。
自分の書いたような簡単なケースであれば、単にdefault文を書かない方法でも良さそうですね。
switch文単体で分岐漏れを防げないとか、Linterでdefault文を追加させない工夫が必要など、考慮する点はありますが、有効そうです。
めっちゃ便利そうなライブラリですね。こういうライブラリを探してました。
1点だけ、記述ミスらしきものを見つけたので報告いたします。
ここでの出力は
age is string: "32"になるかと思います。ありがとうございます。
ご指摘の記述ミス、修正させていただきました。
zodでバリデーションをユースケースとしてneverthrowライブラリのResult型とts-patternを使いながらデモ作ってみました。
デモコードです。
簡単ですが、以上です。