// Type definitions for icepick v1.3.0 // Project: https://github.com/aearly/icepick // Definitions by: Nathan Brown , Tobias Cohen // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped export declare function freeze(collection: T): T; export declare function thaw(collection: T): T; export declare function assoc(collection: T, key: number | string, value: V): T; export declare function dissoc(collection: T, key: number | string): T; export declare function assocIn(collection: T, path: Array, value: V): T; export declare function getIn(collection: T, path: Array): any; export declare function updateIn(collection: T, path: Array, callback: (value: V) => V): T; export {assoc as set}; export {dissoc as unset}; export {assocIn as setIn}; export declare function assign(target: T): T; export declare function assign(target: T, source1: S1): (T & S1); export declare function assign(target: T, s1: S1, s2: S2): (T & S1 & S2); export declare function assign(target: T, s1: S1, s2: S2, s3: S3): (T & S1 & S2 & S3); export declare function assign(target: T, s1: S1, s2: S2, s3: S3, s4: S4): (T & S1 & S2 & S3 & S4); export {assign as extend}; export declare function merge(target: T, source: S1): (T & S1); export declare function push(array: T[], element: T): T[]; export declare function pop(array: T[]): T[]; export declare function shift(array: T[]): T[]; export declare function unshift(array: T[], element: T): T[]; export declare function reverse(array: T[]): T[]; export declare function sort(array: T[], compareFunction?: (a: T, b: T) => number): T[]; export declare function splice(array: T[], start: number, deleteCount: number, ...items: T[]): T[]; export declare function slice(array: T[], begin?: number, end?: number): T[]; export declare function map(fn: (value: T) => U, array: T[]): U[]; export declare function filter(fn: (value: T) => boolean, array: T[]): T[]; interface IcepickWrapper { value(): T; freeze(): IcepickWrapper; thaw(): IcepickWrapper; assoc(key: number | string, value: V): IcepickWrapper; set(key: number | string, value: V): IcepickWrapper; dissoc(key: number | string): IcepickWrapper; unset(key: number | string): IcepickWrapper; assocIn(path: Array, value: V): IcepickWrapper; setIn(path: Array, value: V): IcepickWrapper; getIn(path: Array): IcepickWrapper; updateIn(path: Array, callback: (value: V) => V): IcepickWrapper; assign(source1: S1): IcepickWrapper; assign(s1: S1, s2: S2): IcepickWrapper; assign(s1: S1, s2: S2, s3: S3): IcepickWrapper; assign(s1: S1, s2: S2, s3: S3, s4: S4): IcepickWrapper; extend(source1: S1): IcepickWrapper; extend(s1: S1, s2: S2): IcepickWrapper; extend(s1: S1, s2: S2, s3: S3): IcepickWrapper; extend(s1: S1, s2: S2, s3: S3, s4: S4): IcepickWrapper; merge(source: S1): IcepickWrapper; } export declare function chain(target: T): IcepickWrapper;