Open6
zod
利点
- 冗長な型定義しなくていい。Zodのスキーマを定義すれば、TSの型を推論できる。
- 他のパッケージに依存しない
- Node.js, ブラウザで動作
- gzip済みで8 kB
- Zodのparse, validateはimmutable
- APIが簡潔
- parse, don't validateというアプローチ。(=オブジェクトのパースでバリデーションもやってしまえば、バリデーション漏れがなくなる。バリデーションとパースが別だと、忘れるリスクある)
- JSでもTSでも使える
zod-to-ts、ts-to-zod、zod-prismaとか、色々なものと相互変換するライブラリがある。
prismaのenumに対してバリデーションしたいときは、prisma側からenumの定義を持ってきて、nativeEnumを使う
あるフィールドのvalidation条件が他のフィールドに依存する場合、refine
が使える。ここでは、任意のバリデーションロジックを実行できる
既存のスキーマに対して、色々その派生のスキーマを作れる。
-
shape
- 特定のフィールドを一つピックアップする
-
keyOf
- フィールドのkey一覧をEnumにできる
-
extend
- フィールドを足せる
-
merge
- フィールドを上書きできる
-
pick, omit
- 特定のフィールドをpickしたりomitしたりできる
-
partial, deepPartial
- 全部オプショナルにできる
-
required
- 全部requiredにできる
-
passthrough
- デフォルトでは、zodはスキーマにないフィールドをパース時に全部落とす。これを、スキーマにないフィールドは全部素通しにできる
-
strict
- スキーマにないキーが来た時にエラーにする
なお、スキーマに対してrefine
を使った場合、それにつづけてpick
やomit
などを使うことはできない。
こういう場合は、ちょっと面倒だが、refineの引数に渡してる関数を別で切り出して、pick, omitした後にそれをスキーマ一つ一つに対してrefineで適用することが推奨されている