import { ExpressionValue } from "../../value/ExpressionValue.js";
import { ExprEvalResult } from "../ExprEvalResult.js";
import { ExprType } from "../../type/ExprType.js";
import { FunctionExpr } from "./FunctionExpr.js";
export declare class FuncArg<T> {
    protected _required: boolean;
    protected _name: string;
    protected _defaultValue?: T;
    constructor(required: boolean, name: string, defaultValue?: T);
    getType(): ExprType;
    /**
     * For the value provided for a specific invocation of the function, return an appropriate result (maybe some kind of type conversion or type check might happen here)
     *
     * @param invocationValue
     */
    transformValue(callingExpr: FunctionExpr, invocationValue: ExprEvalResult<ExpressionValue>): ExprEvalResult<ExpressionValue>;
    get required(): boolean;
    get name(): string;
    get defaultValue(): T | undefined;
    hasDefaultValue(): boolean;
}
