declare const KEY_SYMBOL_ACTION: unique symbol;
declare const KEY_SYMBOL_VALUEA: unique symbol;
declare const KEY_SYMBOL_VALUEB: unique symbol;
declare const KEY_ACTION = "#@~!action";
declare const KEY_VALUEA = "#@~!valueA";
declare const KEY_VALUEB = "#@~!valueB";
interface DiffSymbolObject {
    [KEY_SYMBOL_ACTION]: "ADDED" | "MODIFIED" | "DELETED";
    [KEY_SYMBOL_VALUEA]: unknown;
    [KEY_SYMBOL_VALUEB]: unknown;
}
interface DiffNormalObject {
    [KEY_ACTION]: "ADDED" | "MODIFIED" | "DELETED";
    [KEY_VALUEA]: unknown;
    [KEY_VALUEB]: unknown;
}
declare type DiffObject<useSymbol extends boolean = true> = useSymbol extends true ? DiffSymbolObject : DiffNormalObject;
interface DiffNormal {
    [name: string]: DiffObject | DiffNormal;
}
interface DiffSymbol {
    [name: string]: DiffSymbolObject | DiffSymbol;
}
declare type Diff<useSymbol extends boolean = true> = useSymbol extends true ? DiffSymbol : DiffNormal;
interface Options<useSymbol extends boolean = true> {
    deep?: false;
    symbol?: useSymbol;
}
interface DiffReturn<useSymbol extends boolean = true> {
    diffs: Diff<useSymbol>;
    count: number;
}
declare function isDiffObject(diffObj: any, checkSymbol?: boolean): diffObj is DiffObject;
declare function isKeyDiffObject(key: string | symbol): boolean;
declare function diff<A extends object, B extends object, useSymbol extends boolean = true>(a: A, b: B, options?: Options<useSymbol>): DiffReturn<useSymbol>;

export { Diff, DiffObject, DiffReturn, KEY_ACTION, KEY_SYMBOL_ACTION, KEY_SYMBOL_VALUEA, KEY_SYMBOL_VALUEB, KEY_VALUEA, KEY_VALUEB, Options, diff, isDiffObject, isKeyDiffObject };
