import ZrContext from "@rbxts/zirconium/out/Data/Context";
import { ZrValue } from "@rbxts/zirconium/out/Data/Locals";
import ZrLuauFunction from "@rbxts/zirconium/out/Data/LuauFunction";
import { InferArguments, ZirconValidator } from "./ZirconTypeValidator";
import { ZirconContext } from "./ZirconContext";
import ZrUndefined from "@rbxts/zirconium/out/Data/Undefined";
export declare function emitArgumentError(func: ZirconFunction<any, any>, context: ZrContext, arg: ZrValue | ZrUndefined, index: number, validator: ZirconValidator<unknown, unknown>): void;
export interface ZirconFunctionMetadata {
    readonly Description?: string;
    readonly ArgumentValidators: ZirconValidator<unknown, unknown>[];
    readonly VariadicValidator?: ZirconValidator<unknown, unknown>;
    readonly HasVariadic: boolean;
}
export declare class ZirconFunction<V extends readonly ZirconValidator<unknown, unknown>[], R extends ZrValue | void> extends ZrLuauFunction {
    private name;
    private zirconCallback;
    private metadata;
    constructor(name: string, zirconCallback: (context: ZirconContext, ...args: InferArguments<V>) => R, metadata: ZirconFunctionMetadata);
    GetName(): string;
    GetArgumentTypes(): string[];
    GetVariadicType(): string | undefined;
    GetDescription(): string | undefined;
    toString(): string;
}
