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