import type { PathType, Root } from './path';
import { Path } from './path';
export type Pointer<O, P extends PathType> = PointerWithSlash<O, P>;
type IsLiteral<T> = T extends string ? string extends T ? false : true : false;
type PointerWithSlash<O, P extends PathType> = P extends `/${infer R}` ? PointerWithoutSlash<O, R> : IsLiteral<P> extends true ? never : unknown;
type PointerWithoutSlash<O, P extends PathType> = P extends `${infer H}/${infer T}` ? PointerWithCompoundPath<O, H, T> : PointerWithSinglePath<O, P>;
type PointerWithCompoundPath<O, H extends string, T extends PathType> = O extends any[] ? PointerWithoutSlash<O[number], T> : H extends keyof O ? PointerWithoutSlash<O[H], T> : never;
type PointerWithSinglePath<O, H extends string> = O extends any[] ? O[number] : H extends keyof O ? O[H] : H extends '' ? O : undefined;
export declare class InvalidPointer extends Error {
    constructor(path: PathType, obj: unknown);
}
declare function from<O = any, P extends PathType = Root>(obj: O, path: Path<P>): Pointer<O, P>;
export declare const Pointer: {
    from: typeof from;
};
export {};
