-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Open
Description
In V3, z.discriminatedUnion
was typed as such, with Discriminator
being generic:
export class ZodDiscriminatedUnion<
Discriminator extends string,
Options extends readonly ZodDiscriminatedUnionOption<Discriminator>[],
> extends ZodType<output<Options[number]>, ZodDiscriminatedUnionDef<Discriminator, Options>, input<Options[number]>>
In V4, this has been removed, and discriminator
resolves to string
:
export function discriminatedUnion<
Types extends readonly [core.$ZodTypeDiscriminable, ...core.$ZodTypeDiscriminable[]],
>(
discriminator: string,
options: Types,
params?: string | core.$ZodDiscriminatedUnionParams
): ZodDiscriminatedUnion<Types> {
// const [options, params] = args;
return new ZodDiscriminatedUnion({
type: "union",
options,
discriminator,
...util.normalizeParams(params),
}) as any;
}
Unless I'm mistaken, this means it's no longer possible for TypeScript to pull the value of the discriminator, and in turn, the possible options that it can have.
Metadata
Metadata
Assignees
Labels
No labels