export type NoInfer<T> = [T][T extends any ? 0 : never];
export type BaseType = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
export type Awaitable<T> = T | Promise<T>;
export type JsonBaseType = string | number | boolean | null | undefined;
export type JsonType = JsonHolder | JsonBaseType;
export type JsonHolder = JsonObject | JsonArray;
export type JsonArray = JsonType[];
export interface JsonObject {
    [key: string]: JsonType;
}
export type MapObject<V, K extends string = string> = {
    [key in K]: V;
};
declare global {
    interface ObjectConstructor {
        typedKeys<O extends object>(o: O): (keyof O)[];
        typedValues<O extends object>(o: O): O[keyof O];
        typedEntries<O extends object>(o: O): [keyof O, O[keyof O]][];
    }
}
export type FileType = "file" | "dir" | "none";
export declare const getFileType: (path: string) => Promise<FileType>;
export declare function isOdd(value: number): boolean;
export type PathType = "DIR" | "FILE" | "NONE";
export declare function pathType(path: string): Promise<PathType>;
export declare function trimAll(value: string): string;
export declare function filterEmpty(arr: string[]): string[];
/**
 *
 * @param base Base reference object for the merge
 * @param overwrite Overwrite object that overwrites the values in the base object
 * @returns Merged object of both objects
 */
export declare function deepMergeObject<O1 extends MapObject<any>, O2 extends MapObject<any>>(base: O1, overwrite: O2, cloneBase?: boolean): O1 & O2;
/**
 *
 * @param base Base object to clone
 * @returns Clone of the base object
 */
export declare function cloneObject<O extends MapObject<any>>(base: O): O;
/**
 *
 * @param base Base array to clone
 * @returns Clone of the base array
 */
export declare function cloneArray<A extends any[]>(base: A): A;
//# sourceMappingURL=base.d.ts.map