import { FuncArg } from "../FuncArg.js";
import { ExprEvalError, ExprEvalResult, ExprEvalSuccess } from "../../ExprEvalResult.js";
import { ExpressionValue } from "../../../value/ExpressionValue.js";
import { FunctionExpr } from "../FunctionExpr.js";
export declare abstract class FuncArgBase<T> extends FuncArg<T> {
    protected constructor(required: boolean, name: string, defaultValue?: T);
    transformValue(callingExpr: FunctionExpr, invocationValue: ExprEvalResult<ExpressionValue>): ExprEvalResult<ExpressionValue>;
    /**
     * Override to type-check the successfully evaluated invocationValue.
     * @protected
     */
    protected transformForTypeCheck(callingExpr: FunctionExpr, invocationValue: ExprEvalSuccess<ExpressionValue>): ExprEvalResult<ExpressionValue>;
    /**
     * Override to transform the error result obtained from evaluating the invocation value.
     * @param invocationValue
     * @protected
     */
    protected transformForError(callingExpr: FunctionExpr, invocationValue: ExprEvalError): ExprEvalResult<ExpressionValue>;
}
