Fix: Optional object properties are not equivalent to required properties with undefined values #3817
+56
−44
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The object input and output logic currently used in
z.object()
converts all keys with a potential value of undefined to optional even if they are required to be present on the object.Current Behavior:
This is different than the type determined by passing the object's type directly into
ZodType
, which does respect the difference between an absent key versus a key present with an undefined value.Expected Behavior:
This PR addresses that by correctly differentiating the optional keys from required keys that may have a value of undefined. It also accounts for the difference in input/out for the zod default type and behavior.
All tests related to the code changes are passing but I did notice that a test for the Ip string type was failing on the
main
branch.