-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Schema in object being inferred differently (and weirdly) #2654
Comments
💎 $25 bounty created by @ericallam |
Add |
had a similar issue recently, seems to be due to the split & intersect approach for inferring object types typing export type addQuestionMarks<
T extends object,
R extends keyof T = requiredKeys<T>
- > = Pick<Required<T>, R> & Partial<T>;
+ > = Pick<Required<T>, R> & Omit<Partial<T>, R>; but also introduces new problems like breaking the inference of generic schemas (as the compiler can no longer determine their shape) |
I have the same problem: Works fine: const test = string().array().or(record(string()));
type Test = z.infer<typeof test> // string[] | Record<string, string> Don't work: const test = object({ values: string().array().or(record(string())) });
type Test = z.infer<typeof test>; // { values: (string[] | Record<string, string>) & (string[] | Record<string, string> | undefined); } |
Honestly this makes zod unusable for me (using strict TS). Guess I'll stick with v3.21.1 and copy over the email validation schema from v3.22.3 for now |
@ericallam has this issue been resolved if not can you assign it to me |
It's still here in In particular, our use case is: const role = z.enum(["Administrator", "Writer", "Readonly"])
const rolesPerLocale = z.record(role.optional())
const repositoryRole = role.or(rolesPerLocale)
// Then later
z.object({
role: repositoryRole
}) This makes us unable to later use |
@AlexGalays with the PR #3138 I believe this will get sorted out. This is what I get from running the code you provided. This seems to be the right type inference. ![]() |
/attempt #2654 |
I can work on this ticket I can be assigned @ericallam |
/attempt #4030 |
Hi @ericallam , is this still open to work on? |
See the following TS snippet:
And the TS playground: link
I'm not sure if this is intended or a bug or maybe just a user error. Using zod
3.21.4
and TS4.8.4
The text was updated successfully, but these errors were encountered: