import * as z from './base';
import { ZodTuple } from './tuple';
export interface ZodFunctionDef<Args extends ZodTuple<any> = ZodTuple<any>, Returns extends z.ZodAny = z.ZodAny> extends z.ZodTypeDef {
    t: z.ZodTypes.function;
    args: Args;
    returns: Returns;
}
export declare class ZodFunction<Args extends ZodTuple<any>, Returns extends z.ZodAny> {
    readonly _def: ZodFunctionDef<Args, Returns>;
    constructor(def: ZodFunctionDef<Args, Returns>);
    validate: (func: z.TypeOfFunction<Args, Returns>) => z.TypeOfFunction<Args, Returns>;
    static create: <T extends ZodTuple<any>, U extends z.ZodAny>(args: T, returns: U) => ZodFunction<T, U>;
}
