update<K, V, C>(collection: C,
key: K,
updater: (value: V | undefined) => V | undefined
): C
update<K, V, C, NSV>(collection: C,
key: K,
notSetValue: NSV,
updater: (value: V | NSV) => V
): C
update<TProps, C, K>(record: C,
key: K,
updater: (value: TProps,[K]) => TProps,[K]
): C
update<TProps, C, K, NSV>(record: C,
key: K,
notSetValue: NSV,
updater: (value: TProps,[K] | NSV) => TProps,[K]
): C
update<V>(collection: Array<V>,
key: number,
updater: (value: V | undefined) => V | undefined
): Array<V>
update<V, NSV>(collection: Array<V>,
key: number,
notSetValue: NSV,
updater: (value: V | NSV) => V
): Array<V>
update<C, K>(object: C, key: K, updater: (value: C,[K]) => C,[K]): C
update<C, K, NSV>(object: C,
key: K,
notSetValue: NSV,
updater: (value: C,[K] | NSV) => C,[K]
): C
update<V, C, K>(collection: C,
key: K,
updater: (value: V) => V
): {[key: string]: V}
update<V, C, K, NSV>(collection: C,
key: K,
notSetValue: NSV,
updater: (value: V | NSV) => V
): {[key: string]: V}