Skip to main content

discriminatedUnion()

discriminatedUnion<Discriminator, Schemas>(discriminator, schemas, message?): DiscriminatedUnionSchema<Discriminator, Schemas>

Discriminated union schema with O(1) lookup.

Unlike regular unions that try each schema sequentially (O(n)), discriminated unions use a discriminator field to directly lookup the correct schema (O(1)).


Type Parametersโ€‹

Discriminator: Discriminator extends stringโ€‹

Schemas: Schemas extends readonly GenericSchema[]โ€‹


Parametersโ€‹

discriminator: Discriminatorโ€‹

The key used to discriminate between variants.

schemas: [...Schemas[]]โ€‹

Array of object schemas with a literal discriminator field.

message?: stringโ€‹

Custom error message (optional).


Returns: DiscriminatedUnionSchema<Discriminator, Schemas>โ€‹

DiscriminatedUnionSchema with O(1) lookup.


Throwsโ€‹

Error If a schema doesn't have a literal discriminator field.


Throwsโ€‹

If duplicate discriminator values are found.


Sinceโ€‹

2.0.0


Exampleโ€‹

const schema = discriminatedUnion('type', [
object({ type: literal('success'), data: string() }),
object({ type: literal('error'), error: string() }),
]);

schema.validator({ type: 'success', data: 'hello' }); // true
schema.validator({ type: 'error', error: 'oops' }); // true