import type { Encoded, Formatter } from "@tai-kun/surrealdb/formatter";
import type { SlotLike } from "@tai-kun/surrealdb/types";
export interface SlotOptions<TValue = any> {
    readonly parse?: ((value: unknown) => TValue) | undefined;
    readonly formatter?: Formatter | undefined;
    readonly defaultValue?: TValue | Encoded<TValue>;
}
export default class Slot<TName extends string = any, TRequired extends boolean = any, TValue = any> implements SlotLike {
    readonly name: TName;
    readonly isRequired: TRequired;
    protected readonly fmt?: Formatter;
    readonly _parse: (value: unknown) => TValue;
    readonly defaultValue?: TValue | Encoded<TValue>;
    constructor(name: TName, isRequired: TRequired, options?: SlotOptions<TValue>);
    protected toOptions(): SlotOptions<TValue>;
    /**
     * @alias {@link type}
     */
    as<TBind extends TValue>(): Slot<TName, true, TBind>;
    /**
     * @alias {@link type}
     */
    as<TBind extends TValue>(parser: (value: unknown) => TBind): Slot<TName, true, TBind>;
    /**
     * @alias {@link as}
     */
    type<TBind extends TValue>(): Slot<TName, true, TBind>;
    /**
     * @alias {@link as}
     */
    type<TBind extends TValue>(parser: (value: unknown) => TBind): Slot<TName, true, TBind>;
    rename<const TName extends string>(name: TName): Slot<TName, TRequired, TValue>;
    default(defaultValue: TValue): Slot<TName, false, TValue>;
    optional(): Slot<TName, false, TValue>;
    required(): Slot<TName, true, TValue>;
}
//# sourceMappingURL=slot.d.ts.map