1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Zodでその他の値の変化に応じてバリデーション条件を変える方法

Posted at

結論: refineを使う

refineとは

Zod を使用すると、改良を通じてカスタム検証ロジックを提供できます。(公式ドキュメントより)

これだけだとよくわからないが、refineはこの文の中にある、カスタム検証ロジックの実現に欠かせないメソッドということらしい。

メソッドの仕様

const freeText = z.string().refine(
    (val) => val.length <= 255, //val -> freeTextの値そのもの/戻り値はboolean
    {
      message: "String can't be more than 255 characters",//message -> falseの際に指定するバリデーションメッセージ
    }
);

今回の要件を満たすためには?

オブジェクトのバリデーションを定義してrefineメソッドを使用する。

const freeObejct = z.object({
    value :z.number(),
    age: z.number()
}).refine(({ value, age }) => {
        if (age <= 18) {
            return false
        }
        return value >= 0;
    },
    { message: "1以上の値を入力してください。" },
)

まとめ

かなり簡単に実装できた。
公式ドキュメントは少し理解しづらいのでZennなどのテックブログでこの類の情報は得た方がいい

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?