declare type TObjectDrillerInternal<T> = {
    value: T;
    path: string;
    at<K extends keyof T>(field: K): TObjectDriller<NonNullable<T[K]>>;
};
export declare type TObjectDriller<T> = (T extends (infer R)[] ? {
    find(func: (_: R) => boolean): TObjectDriller<NonNullable<R>>;
} : {}) & TObjectDrillerInternal<T>;
/**
 * A type-safe way to drill down into an object and gather the associated path
 * NOTE: ObjectDriller is only for accessing data. The underlying `obj` should
 * never be mutated directly.
 */
export declare class ObjectDriller<T> {
    value: T;
    arrayValue: any[];
    path: string;
    constructor(obj: T, path?: string);
    /**
     * Drill down into the object by specifying the next field
     * @param field A field on the data object
     */
    at<K extends keyof T>(field: K): TObjectDriller<NonNullable<T[K]>>;
    find<K extends keyof T>(func: (_: T[K]) => boolean): TObjectDriller<NonNullable<T[K]>>;
}
export {};
