【Zod】ErrorMapでエラーメッセージをカスタマイズして共通化する
- Zodでエラーメッセージを設定する際、上記のようにスキーマ毎に
message
を指定する方法が一般的かもしれない - しかしこの方法だとスキーマ定義のコード量が増えるだけでなく設定ミスなども発生しやすくなるので、いい感じにエラーメッセージを共通化したい
- デフォルトのメッセージは英語なので日本語化したい
ZodErrorMapを使う方法
- ZodErrorMapでエラー内容に応じた任意のメッセージを設定
z.setErrorMap
することでグローバルにこの設定が反映される
今回は入力値がstring
のケースのみを考慮したErrorMapではあるが、これでスキーマ毎にmessage
を指定する必要もなく、エラーメッセージを共通化できた。
スキーマ毎にErrorMapを指定することも可能。
そのためグローバルに設定したErrorMapを継承しつつ、より具体的なErrorMapで上書きする、ということも可能。
superRefineを使う方法
superRefine
に渡す関数を動的に生成し、エラーメッセージ (とロジック) を共通化する方法- 苦し紛れなので正直前述のErrorMapを使う方が無難
- Zodから提供される検証ロジックを利用できない
superRefine
を多用することになるのでスキーマの可読性が下がる