/**
 * Allows us to represent nested Provable types, to save us from always having to
 * wrap types in `Struct` and similar.
 */
import { type InferProvable, type ProvableHashable } from 'o1js';
import { ProvableType } from './o1js-missing.ts';
export { NestedProvable, inferNestedProvable };
export type { NestedProvableFor, InferNestedProvable };
declare const NestedProvable: {
    get: {
        <T>(type: NestedProvableFor<T>): ProvableHashable<T>;
        (type: NestedProvable): ProvableHashable<any>;
    };
    fromValue<T>(value: T): NestedProvableFor<T>;
};
declare function inferNestedProvable<Type extends NestedProvable>(type: Type): NestedProvableFor<InferNestedProvable<Type>>;
type NestedProvable = ProvableType | {
    [key: string]: NestedProvable;
};
type NestedProvableFor<T> = ProvableType<T> | {
    [K in keyof T & string]: NestedProvableFor<T[K]>;
};
type InferNestedProvable<A> = A extends ProvableType ? InferProvable<A> : A extends Record<string, NestedProvable> ? {
    [K in keyof A]: InferNestedProvable<A[K]>;
} : never;
