ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

Yupのcastエラーを任意のメッセージに変える

yupのYup.date().required('プロパティは必須です')のようなメッセージを出すと思うんですが、Yup.date()の変換に失敗した場合に出るメッセージの指定方法がぱっとわからなかったのでメモ

github.com

tl;dr

typeErrorを使う

そもそもの発端

他の主要ブラウザは対応してるんだけど、mac版のsafariは次のsafari 14.1じゃないとinput type=dateが対応してなくてinput要素が実質textになってた

developer.mozilla.org

なので日付以外の値や入力中の日付*1が入った際にdateに変換できないエラーが出ていた

XXXXX must be a `date` type, but the final value was: `Invalid Date` (cast from the value `"2020-09-"`).

解決方法

datepicker自体は次のバージョンで入るのと各実装で違うので置いておいて、エラーメッセージ自体はtypeErrorを使うことで設定できた

github.com

Yup.date().typeError('invalid!!')

余談

他のものはrequired('error message')のようにバリデーションに引数でメッセージを取るけど、dateみたいなものはdate自体がエラーメッセージを取るのではなくtypeErrorのようなものがあることに気づくのに地味に時間がかかった。。

*1:'2020-'とか