core-utils
    Preparing search index...

    Function discriminatedUnionWithFallback

    • 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.

      const notificationSchema = discriminatedUnionWithFallback("channel", [
      z.object({ channel: z.literal("EMAIL"), emailAddress: z.string().email() }),
      ]);

      Type Parameters

      • const Key extends string
      • const Schemas extends readonly [LiteralKeyedObject<Key>, LiteralKeyedObject<Key>]

      Parameters

      Returns ZodType<output<Schemas[number]> | UnrecognizedVariant<Key>, ZodTypeDef, unknown>