diff --git a/__tests__/Map.ts b/__tests__/Map.ts index c0686269a..b41c99d46 100644 --- a/__tests__/Map.ts +++ b/__tests__/Map.ts @@ -82,6 +82,7 @@ describe('Map', () => { it('accepts non-collection array-like objects as keyed collections', () => { const m = Map({ length: 3, 1: 'one' }); expect(m.get('length')).toBe(3); + // @ts-expect-error -- type error, but the API is tolerante expect(m.get('1')).toBe('one'); expect(m.toJS()).toEqual({ length: 3, 1: 'one' }); }); diff --git a/__tests__/getIn.ts b/__tests__/getIn.ts index ebab78e1f..8506dc28b 100644 --- a/__tests__/getIn.ts +++ b/__tests__/getIn.ts @@ -75,6 +75,7 @@ describe('getIn', () => { key: { regular: 'jsobj' }, list: List([Map({ num: 10 })]), }); + // @ts-expect-error -- expected error expect(deep.getIn(['key', 'foo', 'item'])).toBe(undefined); expect(deep.getIn(['key', 'foo', 'item'], 'notSet')).toBe('notSet'); expect(deep.getIn(['list', 0, 'num', 'badKey'])).toBe(undefined); diff --git a/type-definitions/Immutable.d.ts b/type-definitions/Immutable.d.ts index 0dd62de45..d9ff4c7de 100644 --- a/type-definitions/Immutable.d.ts +++ b/type-definitions/Immutable.d.ts @@ -764,11 +764,12 @@ declare module Immutable { export function Map(): Map; export function Map(): Map; export function Map(collection: Iterable<[K, V]>): Map; - export function Map(obj: { [P in K]?: V }): Map; + export function Map(collection: Iterable>): Map; export function Map( obj: R ): ObjectLikeMap; - // export function Map(obj: { [key: string]: V }): Map; + export function Map(obj: { [key: string]: V }): Map; + export function Map(obj: { [P in K]?: V }): Map; export interface ObjectLikeMap< R extends { [key in string | number]: unknown } @@ -806,6 +807,11 @@ declare module Immutable { >( path: [K1, K2, K3, K4] ): GetMapType[K2]>[K3]>[K4]; + + set( + key: K, + value: V + ): this & ObjectLikeMap<{ [key in K]: V }>; } type GetMapType = S extends ObjectLikeMap ? T : S; diff --git a/type-definitions/ts-tests/map.ts b/type-definitions/ts-tests/map.ts index c85556fa0..1085512ba 100644 --- a/type-definitions/ts-tests/map.ts +++ b/type-definitions/ts-tests/map.ts @@ -115,6 +115,9 @@ import { Map, List } from 'immutable'; // $ExpectType Map Map().set(0, 'a'); + + // // $ExpectType ObjectLikeMap<{ a: string; }> + // Map({ a: 1 }).set('b', 'b'); } {