& string]: (_: Extract) => Ret;
} & {
readonly [Tag in Exclude & string]: (_: Extract) => any;
} & {
readonly [Tag in Exclude , f: Fn]) => (self: Matcher) => Matcher>>, Types.ApplyFilters>>>, A | ReturnType , Pr, Ret>;
/**
* Matches values based on a discriminator field and **ensures all cases are
* handled**.
*
* **Details*+
*
* This function is similar to {@link discriminators}, but **requires that all
* possible cases** are explicitly handled. It is useful when working with
* discriminated unions, where a specific field (e.g., `"type"`) determines the
* shape of an object. Each possible value of the field must have a
* corresponding handler, ensuring **exhaustiveness checking** at compile time.
*
* This function **does not require** `Match.exhaustive` at the end of the
* pipeline because it enforces exhaustiveness by design.
*
* @example
* ```ts
* import { Match, pipe } from "effect"
*
* const match = pipe(
* Match.type<{ type: "A"; a: string } | { type: "B"; b: number } | { type: "C"; c: boolean }>(),
* Match.discriminatorsExhaustive("type")({
* A: (a) => a.a,
* B: (b) => b.b,
* C: (c) => c.c
* })
* )
* ```
*
* @category Defining patterns
* @since 1.0.0
*/
export declare const discriminatorsExhaustive: , f: Fn]) => (self: Matcher) => Matcher>>, Types.ApplyFilters>>>, ReturnType , Pr, Ret>;
/**
* Matches values based on their `_tag` field and requires handling of all
* possible cases.
*
* **Details**
*
* This function is designed for **discriminated unions** where every possible
* `_tag` value must have a corresponding handler. Unlike {@link tags}, this
* function ensures **exhaustiveness**, meaning all cases must be explicitly
* handled. If a `_tag` value is missing from the mapping, TypeScript will
* report an error.
*
* @example
* ```ts
* import { Match, pipe } from "effect"
*
* const match = pipe(
* Match.type<{ _tag: "A"; a: string } | { _tag: "B"; b: number } | { _tag: "C"; c: boolean }>(),
* Match.tagsExhaustive({
* A: (a) => a.a,
* B: (b) => b.b,
* C: (c) => c.c
* })
* )
* ```
*
* @category Defining patterns
* @since 1.0.0
*/
export declare const tagsExhaustive: : P extends SafeRefinement = [ToInvertedRefinement ] extends [infer X] ? X : never;
/**
* @since 1.0.0
*/
type PForMatch = [ResolvePred ] extends [infer X] ? X : never;
/**
* @since 1.0.0
*/
type PForExclude = [SafeRefinementR : A extends Predicate.Predicate : A extends SafeRefinement : A extends Predicate.Predicate