import type { NestedObject, Getter, GetArrayLength } from './types';
export declare const IS_PRODUCTION: boolean;
export declare function makeTypeSafeSelector<P extends string[]>(slice: '', ...paths: P): {
    <V>(): (object: NestedObject<P, 0, V>) => V;
    bindToInput: <O extends NestedObject<P, 0, any>>() => (object: O) => Getter<P, O>;
};
export declare function makeTypeSafeSelector<P extends string[]>(...paths: P): {
    <V>(): (object: NestedObject<P, 0, V>) => V;
    bindToInput: <O extends NestedObject<P, 0, any>>() => (object: O) => Getter<P, O>;
};
export declare const createGetter: <P extends string[]>(...paths: P) => <O extends 0 extends GetArrayLength<P> ? any : { [K in P[0]]: 1 extends GetArrayLength<P> ? any : { [K_1 in P[1]]: 2 extends GetArrayLength<P> ? any : { [K_2 in P[2]]: 3 extends GetArrayLength<P> ? any : { [K_3 in P[3]]: 4 extends GetArrayLength<P> ? any : { [K_4 in P[4]]: 5 extends GetArrayLength<P> ? any : { [K_5 in P[5]]: 6 extends GetArrayLength<P> ? any : { [K_6 in P[6]]: 7 extends GetArrayLength<P> ? any : { [K_7 in P[7]]: 8 extends GetArrayLength<P> ? any : { [K_8 in P[8]]: 9 extends GetArrayLength<P> ? any : { [K_9 in P[9]]: 10 extends GetArrayLength<P> ? any : { [K_10 in P[10]]: 11 extends GetArrayLength<P> ? any : any; }; }; }; }; }; }; }; }; }; }; }>(object: O) => Getter<P, O>;
/**
 * Alias for `getter`, The argument order is simply switched, `object` before `paths`;
 *
 * @template O
 * @template P
 * @param {O} object
 * @param {...P} paths
 */
export declare const get: <O extends 0 extends GetArrayLength<P> ? any : { [K in P[0]]: 1 extends GetArrayLength<P> ? any : { [K_1 in P[1]]: 2 extends GetArrayLength<P> ? any : { [K_2 in P[2]]: 3 extends GetArrayLength<P> ? any : { [K_3 in P[3]]: 4 extends GetArrayLength<P> ? any : { [K_4 in P[4]]: 5 extends GetArrayLength<P> ? any : { [K_5 in P[5]]: 6 extends GetArrayLength<P> ? any : { [K_6 in P[6]]: 7 extends GetArrayLength<P> ? any : { [K_7 in P[7]]: 8 extends GetArrayLength<P> ? any : { [K_8 in P[8]]: 9 extends GetArrayLength<P> ? any : { [K_9 in P[9]]: 10 extends GetArrayLength<P> ? any : { [K_10 in P[10]]: 11 extends GetArrayLength<P> ? any : any; }; }; }; }; }; }; }; }; }; }; }, P extends readonly string[] | string[]>(object: O, ...paths: P) => Getter<P, O>;
