type Path = string | ReadonlyArray; interface WrappedObject { set(path?: Path, value?: any): WrappedObject push(path?: Path, value?: any): WrappedObject del(path?: Path): WrappedObject assign(path?: Path, source?: any): WrappedObject merge(path?: Path, source?: any): WrappedObject update(path?: Path, updater?: (formerValue: any) => any): WrappedObject insert(path?: Path, value?: any, index?: number): WrappedObject value(): T } declare module 'object-path-immutable' { export function wrap(obj: T): WrappedObject export function get(src: T, path?: Path, defaultValue?: S): S export function set(src: T, path?: Path, value?: any): T export function push(src: T, path?: Path, value?: any): T export function del(src: T, path?: Path): T export function assign(src: T, path?: Path, source?: any): T export function merge(src: T, path?: Path, source?: any): T export function update(src: T, path?: Path, updater?: (formerValue: any) => any): T export function insert(src: T, path?: Path, value?: any, index?: number): T }