import type { AnyTypeGuard, GuardType, GuardTypeInput, PipeGuard, TypeGuardFn } from './types'; declare function GuardPipe>(...guard: readonly [A, B]): TypeGuardFn, GuardType>; declare function GuardPipe, C extends PipeGuard>(...guard: readonly [A, B, C]): TypeGuardFn, GuardType>; declare function GuardPipe, C extends PipeGuard, D extends PipeGuard>(...guard: readonly [A, B, C, D]): TypeGuardFn, GuardType>; declare function GuardPipe, C extends PipeGuard, D extends PipeGuard, E extends PipeGuard>(...guard: readonly [A, B, C, D, E]): TypeGuardFn, GuardType>; declare function GuardPipe, C extends PipeGuard, D extends PipeGuard, E extends PipeGuard, F extends PipeGuard>(...guard: readonly [A, B, C, D, E, F]): TypeGuardFn, GuardType>; declare function GuardPipe, C extends PipeGuard, D extends PipeGuard, E extends PipeGuard, F extends PipeGuard, G extends PipeGuard>(...guard: readonly [A, B, C, D, E, F, G]): TypeGuardFn, GuardType>; declare function GuardPipe, C extends PipeGuard, D extends PipeGuard, E extends PipeGuard, F extends PipeGuard, G extends PipeGuard, H extends PipeGuard>(...guard: readonly [A, B, C, D, E, F, G, H]): TypeGuardFn, GuardType>; type GuardPipe = typeof GuardPipe; /** * Given one or multiple Type Guard as arguments, returns a Type Guard that checks if the given value matches all given Type Guard. * Same as {@linkcode guardAll}, but each Type Guard must implement the previous Type Guard output, which will be inferred up to 8 Type Guard. * @example * ```ts * const isFooBar = guardPipe( * matchType('string'), * (val): val is `foo${string}` => val.startsWith('foo'), * (val): val is 'foobar' => val === 'foobar' * ); * * const test = {} as unknown; * if(isFooBar(test)){ * test; // 'foobar' * } * ``` * @category Type Guard Composer * */ declare const guardPipe: GuardPipe; export { guardPipe }; export type { GuardPipe };