/**
 * 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>;
