declare function extend(deep: boolean, target: T, source: U): T & U; declare function extend(deep: boolean, target: T, source1: U, source2: V): T & U & V; declare function extend(deep: boolean, target: T, source1: U, source2: V, source3: W): T & U & V & W; declare function extend( deep: boolean, target: T, source1: U, source2: V, source3: W, source4: X, ): T & U & V & W & X; declare function extend(target: T, source: U): T & U; declare function extend(target: T, source1: U, source2: V): T & U & V; declare function extend(target: T, source1: U, source2: V, source3: W): T & U & V & W; declare function extend(target: T, source1: U, source2: V, source3: W, source4: X): T & U & V & W & X; declare function extend(deep: boolean, target: any, ...sources: any[]): any; declare function extend(target: any, ...sources: any[]): any; declare namespace extend {} export = extend;