diff --git a/type-definitions/Immutable.d.ts b/type-definitions/Immutable.d.ts index 9efc21ed23..6c5ab1cc22 100644 --- a/type-definitions/Immutable.d.ts +++ b/type-definitions/Immutable.d.ts @@ -392,7 +392,7 @@ declare module Immutable { * @see `Map#update` */ update(index: number, notSetValue: T, updater: (value: T) => T): this; - update(index: number, updater: (value: T) => T): this; + update(index: number, updater: (value: T | undefined) => T): this; update(updater: (value: this) => R): R; /** @@ -958,7 +958,7 @@ declare module Immutable { * Note: `update(key)` can be used in `withMutations`. */ update(key: K, notSetValue: V, updater: (value: V) => V): this; - update(key: K, updater: (value: V) => V): this; + update(key: K, updater: (value: V | undefined) => V): this; update(updater: (value: this) => R): R; /** @@ -1367,7 +1367,7 @@ declare module Immutable { * @see Collection.Keyed.mapEntries */ mapEntries( - mapper: (entry: [K, V], index: number, iter: this) => [KM, VM], + mapper: (entry: [K, V], index: number, iter: this) => [KM, VM] | undefined, context?: unknown ): Map; @@ -1538,7 +1538,7 @@ declare module Immutable { * @see Collection.Keyed.mapEntries */ mapEntries( - mapper: (entry: [K, V], index: number, iter: this) => [KM, VM], + mapper: (entry: [K, V], index: number, iter: this) => [KM, VM] | undefined, context?: unknown ): OrderedMap; @@ -2825,7 +2825,7 @@ declare module Immutable { * @see Collection.Keyed.mapEntries */ mapEntries( - mapper: (entry: [K, V], index: number, iter: this) => [KM, VM], + mapper: (entry: [K, V], index: number, iter: this) => [KM, VM] | undefined, context?: unknown ): Seq.Keyed; @@ -3431,9 +3431,11 @@ declare module Immutable { * * Note: `mapEntries()` always returns a new instance, even if it produced * the same entry at every step. + * + * If the mapper function returns `undefined`, then the entry will be filtered */ mapEntries( - mapper: (entry: [K, V], index: number, iter: this) => [KM, VM], + mapper: (entry: [K, V], index: number, iter: this) => [KM, VM] | undefined, context?: unknown ): Collection.Keyed; @@ -4753,7 +4755,7 @@ declare module Immutable { /** * Like `max`, but also accepts a `comparatorValueMapper` which allows for * comparing by more sophisticated means: - * + * * * ```js * const { List, } = require('immutable'); @@ -4790,7 +4792,7 @@ declare module Immutable { /** * Like `min`, but also accepts a `comparatorValueMapper` which allows for * comparing by more sophisticated means: - * + * * * ```js * const { List, } = require('immutable'); @@ -5332,7 +5334,7 @@ declare module Immutable { export function update>( collection: C, key: K, - updater: (value: V) => V + updater: (value: V | undefined) => V ): C; export function update, NSV>( collection: C, diff --git a/type-definitions/ts-tests/list.ts b/type-definitions/ts-tests/list.ts index 7b0d628daa..7b9599a327 100644 --- a/type-definitions/ts-tests/list.ts +++ b/type-definitions/ts-tests/list.ts @@ -248,25 +248,25 @@ import { List().update((v) => 1); // $ExpectError - List().update((v: List) => v); + List().update((v: List | undefined) => v); // $ExpectType List - List().update(0, (v: number) => 0); + List().update(0, (v: number | undefined) => 0); // $ExpectError - List().update(0, (v: number) => v + 'a'); + List().update(0, (v: number | undefined) => v + 'a'); // $ExpectType List - List().update(1, 10, (v: number) => 0); + List().update(1, 10, (v: number | undefined) => 0); // $ExpectError - List().update(1, 'a', (v: number) => 0); + List().update(1, 'a', (v: number | undefined) => 0); // $ExpectError - List().update(1, 10, (v: number) => v + 'a'); + List().update(1, 10, (v: number | undefined) => v + 'a'); // $ExpectType List - update(List(), 0, (v: number) => 0); + update(List(), 0, (v: number | undefined) => 0); // $ExpectError update(List(), 1, 10, (v: number) => v + 'a'); diff --git a/type-definitions/ts-tests/map.ts b/type-definitions/ts-tests/map.ts index 0b6a69edb1..0c9fc7ce95 100644 --- a/type-definitions/ts-tests/map.ts +++ b/type-definitions/ts-tests/map.ts @@ -160,22 +160,22 @@ import { Map, List } from '../../'; Map().update((v) => 1); // $ExpectError - Map().update((v: Map) => v); + Map().update((v: Map | undefined) => v); // $ExpectType Map - Map().update(0, (v: number) => 0); + Map().update(0, (v: number | undefined) => 0); // $ExpectError - Map().update(0, (v: number) => v + 'a'); + Map().update(0, (v: number | undefined) => v + 'a'); // $ExpectType Map - Map().update(1, 10, (v: number) => 0); + Map().update(1, 10, (v: number | undefined) => 0); // $ExpectError - Map().update(1, 'a', (v: number) => 0); + Map().update(1, 'a', (v: number | undefined) => 0); // $ExpectError - Map().update(1, 10, (v: number) => v + 'a'); + Map().update(1, 10, (v: number | undefined) => v + 'a'); } { diff --git a/type-definitions/ts-tests/ordered-map.ts b/type-definitions/ts-tests/ordered-map.ts index d0564dffde..b5038942a0 100644 --- a/type-definitions/ts-tests/ordered-map.ts +++ b/type-definitions/ts-tests/ordered-map.ts @@ -145,22 +145,22 @@ import { OrderedMap, List } from '../../'; OrderedMap().update((v) => 1); // $ExpectError - OrderedMap().update((v: OrderedMap) => v); + OrderedMap().update((v: OrderedMap | undefined) => v); // $ExpectType OrderedMap - OrderedMap().update(0, (v: number) => 0); + OrderedMap().update(0, (v: number | undefined) => 0); // $ExpectError - OrderedMap().update(0, (v: number) => v + 'a'); + OrderedMap().update(0, (v: number | undefined) => v + 'a'); // $ExpectType OrderedMap - OrderedMap().update(1, 10, (v: number) => 0); + OrderedMap().update(1, 10, (v: number | undefined) => 0); // $ExpectError - OrderedMap().update(1, 'a', (v: number) => 0); + OrderedMap().update(1, 'a', (v: number | undefined) => 0); // $ExpectError - OrderedMap().update(1, 10, (v: number) => v + 'a'); + OrderedMap().update(1, 10, (v: number | undefined) => v + 'a'); } {