Builds a forwards-compatible response schema for a discriminated union whose variant set grows
over time. Takes the same arguments as z.discriminatedUnion.
This is for responses only. Requests declare their own z.discriminatedUnion, which rejects a
variant the server does not know rather than silently accepting it.
The result is the variants made .strip() plus a branch pinned to z.literal(ENUM_FALLBACK),
with an unknown discriminator rewritten to { [discriminator]: ENUM_FALLBACK } before parsing so
a future variant reads as the fallback instead of failing. A known variant with a missing field
or an invalid value is still rejected.
A z.union fallback branch matches any unknown value, so a failing known variant reports an
opaque invalid_union. Discriminating first names the offending field.
Every variant must declare z.literal at the discriminator. The helper owns strictness at each
variant's top level, so an already-.strict() variant still yields a stripping branch. Only
top-level discriminators are supported.
Builds a forwards-compatible response schema for a discriminated union whose variant set grows over time. Takes the same arguments as
z.discriminatedUnion.This is for responses only. Requests declare their own
z.discriminatedUnion, which rejects a variant the server does not know rather than silently accepting it.The result is the variants made
.strip()plus a branch pinned toz.literal(ENUM_FALLBACK), with an unknown discriminator rewritten to{ [discriminator]: ENUM_FALLBACK }before parsing so a future variant reads as the fallback instead of failing. A known variant with a missing field or an invalid value is still rejected.A
z.unionfallback branch matches any unknown value, so a failing known variant reports an opaqueinvalid_union. Discriminating first names the offending field.Every variant must declare
z.literalat the discriminator. The helper owns strictness at each variant's top level, so an already-.strict()variant still yields a stripping branch. Only top-level discriminators are supported.