veffect
Version:
powerful TypeScript validation library built on the robust foundation of Effect combining exceptional type safety, high performance, and developer experience. Taking inspiration from Effect's functional principles, VEffect delivers a balanced approach tha
24 lines (23 loc) • 1.01 kB
TypeScript
/**
* Discriminated Union Schema implementation
*/
import { Schema } from '../types';
export interface DiscriminatedUnionSchema<T> extends Schema<T> {
readonly _tag: 'DiscriminatedUnionSchema';
}
/**
* Creates a discriminated union schema that validates and handles union types based on a discriminator property
*
* @param discriminator The property that determines which schema to use
* @param schemas Array of object schemas that each have the discriminator property
* @returns A schema that validates against the appropriate union member based on the discriminator
*
* @example
* const userSchema = discriminatedUnion('type', [
* object({ type: literal('admin'), permissions: array(string()) }),
* object({ type: literal('user'), role: string() })
* ]);
*/
export declare function discriminatedUnion<D extends string, S extends Schema<any>[], T = {
[K in number]: S[K] extends Schema<infer U> ? U : never;
}[number]>(discriminator: D, schemas: S): DiscriminatedUnionSchema<T>;