import type { EnumOf } from '../../utils/index.js';
import type { JSONSchemaType } from '../targets/json-schema.js';
import type { Validation } from '../Validation.js';
import { TBase, type TName } from './TBase.js';
export declare const TObjectShapeValidationStrategy: {
    /**
     * No shape validation is performed
     *
     * To be used when the object can have multiple shapes or that its shape is not important.
     *
     * Otherwise, you can still override {@link validate} in the `T*` class and do your own validation.
     */
    readonly NONE: "NONE";
    /**
     * Validate against the {@link TObject.example()}
     *
     * It checks that the keys of the value, sorted alphabetically, are the same as the example's keys.
     */
    readonly SAME_AS_EXAMPLE: "SAME_AS_EXAMPLE";
};
export type TObjectShapeValidationStrategy = EnumOf<typeof TObjectShapeValidationStrategy>;
export interface TObjectConstraints {
    /**
     * @defaultValue {@link TObjectShapeValidationStrategy.SAME_AS_EXAMPLE}
     */
    shapeValidationStrategy: TObjectShapeValidationStrategy;
}
export declare class TObject<T extends object> extends TBase<T> {
    protected constraints: TObjectConstraints;
    constructor(constraints?: TObjectConstraints);
    tName(): TName;
    example(): T;
    fmt(ifNullOrUndefined?: string | undefined): string;
    jsonSchemaType(): JSONSchemaType;
    validate(): Validation;
    private valueAndExampleHaveSameKeys;
}
