declare function deepDiff( lhs: LHS, rhs: RHS, prefilter?: deepDiff.PreFilter, ): Array> | undefined; declare function deepDiff( lhs: LHS, rhs: RHS, prefilter?: deepDiff.PreFilter, acc?: deepDiff.Accumulator, ): deepDiff.Accumulator; declare namespace deepDiff { interface DiffNew { kind: "N"; path?: any[] | undefined; rhs: RHS; } interface DiffDeleted { kind: "D"; path?: any[] | undefined; lhs: LHS; } interface DiffEdit { kind: "E"; path?: any[] | undefined; lhs: LHS; rhs: RHS; } interface DiffArray { kind: "A"; path?: any[] | undefined; index: number; item: Diff; } type Diff = DiffNew | DiffDeleted | DiffEdit | DiffArray; type PreFilterFunction = (path: any[], key: any) => boolean; interface PreFilterObject { prefilter?(path: any[], key: any): boolean; normalize?(currentPath: any, key: any, lhs: LHS, rhs: RHS): [LHS, RHS] | undefined; } type PreFilter = PreFilterFunction | PreFilterObject; interface Accumulator { push(diff: Diff): void; length: number; } type Observer = (diff: Diff) => void; type Filter = (target: LHS, source: RHS, change: Diff) => boolean; function diff( lhs: LHS, rhs: RHS, prefilter?: PreFilter, ): Array> | undefined; function diff( lhs: LHS, rhs: RHS, prefilter?: PreFilter, acc?: Accumulator, ): Accumulator; function orderIndependentDiff( lhs: LHS, rhs: RHS, prefilter?: PreFilter, ): Array> | undefined; function orderIndependentDiff( lhs: LHS, rhs: RHS, prefilter?: PreFilter, acc?: Accumulator, ): Accumulator; function observableDiff( lhs: LHS, rhs: RHS, observer?: Observer, prefilter?: PreFilter, orderIndependent?: boolean, ): Array>; function orderIndependentDeepDiff( lhs: LHS, rhs: RHS, changes: Array>, prefilter: PreFilter, path: any[], key: any, stack: any[], ): void; function orderIndepHash(object: any): number; function applyDiff(target: LHS, source: RHS, filter?: Filter): void; function applyChange(target: LHS, source: any, change: Diff): void; function revertChange(target: LHS, source: any, change: Diff): void; } export = deepDiff;