日本
The Morning Dev

知っておくべきことだけを、毎朝

‹
 

リリース

Zod 4.4.0でついに`z.unknown()`がoptionalではなくなっていた

Zenn トレンド · 執筆:おかゆりぞっと ·

要点

  • Zodを4.3.6以前から4.4.0以降に更新すると、z.object()のプロパティに指定したz.unknown()の挙動が変わる
  • z.object({ foo: z.unknown() })のスキーマでは、空オブジェクト{}のsafeParseが失敗するようになったと報告されている
  • リリースノートの注意点は手元のコードと無関係に見えたが、原因は4.4.0でのz.unknown()の変更だった

なぜ重要か

既存コードでz.object()内のz.unknown()を使っている場合、Zodを更新するだけでバリデーションが失敗する可能性がある。リリースノートだけでは原因に気づきにくい。

影響を受ける人

  • Zodを4.3.6以前から4.4.0以降に更新する開発者
  • z.object()内でz.unknown()を使っているコードの保守担当者

取るべき対応

  1. z.object()内のz.unknown()を使っている箇所を洗い出し、既存のバリデーションテストで挙動を確認する
  • Zod 4.3.6
  • Zod 4.4.0
  • #Zod
  • #TypeScript
  • #バリデーション
  • #破壊的変更

概要 Zodを4.3.6以前から4.4.0以降に更新したところ、これまで問題なく通っていたバリデーションが失敗するようになりました。リリースノートにあったいくつかの注意点はどれも手元のコードと無関係に見えましたが、実際にはこの4.4.0のリリースでz.object()のプロパティに指定したz.unknown()の挙動が変わっていたことが原因でした。 const schema = z.object({ foo: z.unknown(), }); schema.safeParse({}).success; // false //…

この記事をどう思いますか?

コメント0件

    Zod 4.4.0でついに`z.unknown()`がoptionalではなくなっていた – The Morning Dev