Open6

zod

nakaakistnakaakist

利点

  • 冗長な型定義しなくていい。Zodのスキーマを定義すれば、TSの型を推論できる。
  • 他のパッケージに依存しない
  • Node.js, ブラウザで動作
  • gzip済みで8 kB
  • Zodのparse, validateはimmutable
  • APIが簡潔
  • parse, don't validateというアプローチ。(=オブジェクトのパースでバリデーションもやってしまえば、バリデーション漏れがなくなる。バリデーションとパースが別だと、忘れるリスクある)
  • JSでもTSでも使える
nakaakistnakaakist

zod-to-ts、ts-to-zod、zod-prismaとか、色々なものと相互変換するライブラリがある。

nakaakistnakaakist

既存のスキーマに対して、色々その派生のスキーマを作れる。

  • shape
    • 特定のフィールドを一つピックアップする
  • keyOf
    • フィールドのkey一覧をEnumにできる
  • extend
    • フィールドを足せる
  • merge
    • フィールドを上書きできる
  • pick, omit
    • 特定のフィールドをpickしたりomitしたりできる
  • partial, deepPartial
    • 全部オプショナルにできる
  • required
    • 全部requiredにできる
  • passthrough
    • デフォルトでは、zodはスキーマにないフィールドをパース時に全部落とす。これを、スキーマにないフィールドは全部素通しにできる
  • strict
    • スキーマにないキーが来た時にエラーにする

なお、スキーマに対してrefineを使った場合、それにつづけてpickomitなどを使うことはできない。
こういう場合は、ちょっと面倒だが、refineの引数に渡してる関数を別で切り出して、pick, omitした後にそれをスキーマ一つ一つに対してrefineで適用することが推奨されている