created: 2024-07-24T03:25:14.003Z

zod で「入力は必須じゃないけど、入力した場合は 1 以上の数値を入れて欲しい」という入力欄のスキーマ定義

掲題の仕様に追加して「入力されなかった場合は undefined になってほしい」もやろうとするとひとひねり必要。

↓ のやりかたできちんと動いた。

定義

    myvalue: z
      .union([
        z.literal(""),
        z.coerce.number().min(1)
      ])
      .transform((v) => (v === "" ? undefined : v)),

型も number | undefined になってくれる。

古代ローマ人の24時間---よみがえる帝都ローマの民衆生活
[ad] 古代ローマ人の24時間---よみがえる帝都ローマの民衆生活
アルベルト・アンジェラ, 関口 英子 (単行本)