type ChangedData<T> = {
    key: keyof T;
    difference?: any;
    maxDepthReached?: boolean;
    newValue?: any;
    oldValue?: any;
    reactElementChanged?: boolean;
};
type Changed<T> = Array<ChangedData<T>>;
export type PropsDifference<T> = {
    removed: Array<keyof T>;
    added: Array<keyof T>;
    changed: Changed<T>;
};
export type ShallowPropsDifference<T> = {
    removed: Array<keyof T>;
    added: Array<keyof T>;
    changed: Array<keyof T>;
};
export declare const getKeys: <T>(obj: T) => Array<keyof T>;
export declare const getKeysAddedRemovedCommon: <T>(object1: T, object2: T) => {
    added: (keyof T & keyof (T & {}))[];
    common: (keyof T & keyof (T & {}))[];
    removed: (keyof T & keyof (T & {}))[];
};
export declare const serializeValue: <T>(value: T[keyof T]) => string | (T[keyof T] & {}) | {
    type: string;
    keys: string[];
} | undefined;
export declare const getPropsDifference: <T>(object1: T, object2: T, curDepth?: number, maxDepth?: number, keysToIgnore?: Array<keyof T>) => PropsDifference<T>;
export declare const getShallowPropsDifference: <T>(object1: T, object2: T) => ShallowPropsDifference<T>;
export {};
