From 3af64202e208da8b6f1c2f6be86fa7cadb9b4442 Mon Sep 17 00:00:00 2001 From: Lee Byron Date: Fri, 26 Oct 2018 18:01:19 -0700 Subject: [PATCH] BREAKING: Remove Iterable as tuple from Map constructor types These have caused more issues with typing than they fixed, unfortunately. While the runtime behavior is still supported, TypeScript types can't capture immutable List as Tuple. Closes #1611 --- type-definitions/Immutable.d.ts | 2 -- type-definitions/ts-tests/map.ts | 17 +++++++---------- type-definitions/ts-tests/ordered-map.ts | 17 +++++++---------- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/type-definitions/Immutable.d.ts b/type-definitions/Immutable.d.ts index 091e642484..5f7343b40d 100644 --- a/type-definitions/Immutable.d.ts +++ b/type-definitions/Immutable.d.ts @@ -759,7 +759,6 @@ declare module Immutable { * not altered. */ export function Map(collection: Iterable<[K, V]>): Map; - export function Map(collection: Iterable>): Map; export function Map(obj: {[key: string]: V}): Map; export function Map(): Map; export function Map(): Map; @@ -1419,7 +1418,6 @@ declare module Immutable { * the `new` keyword during construction. */ export function OrderedMap(collection: Iterable<[K, V]>): OrderedMap; - export function OrderedMap(collection: Iterable>): OrderedMap; export function OrderedMap(obj: {[key: string]: V}): OrderedMap; export function OrderedMap(): OrderedMap; export function OrderedMap(): OrderedMap; diff --git a/type-definitions/ts-tests/map.ts b/type-definitions/ts-tests/map.ts index 549374a7b6..64f51af6ff 100644 --- a/type-definitions/ts-tests/map.ts +++ b/type-definitions/ts-tests/map.ts @@ -12,20 +12,17 @@ import { Map, List } from '../../'; // $ExpectType Map<{}, {}> Map(); - // $ExpectType Map - Map([[1, 1]]); + // $ExpectType Map + Map([[1, 'a']]); + + // $ExpectType Map + Map(List<[number, string]>([[1, 'a']])); // $ExpectType Map Map({ a: 1 }); - // $ExpectType Map - Map(List.of(List(['a', 'b']))); - - // $ExpectType Map - Map(List.of(List([1, 2]))); - - // $ExpectType Map - Map(List.of(List(['a', 1]))); + // $ExpectError - TypeScript does not support Lists as tuples + Map(List([List(['a', 'b'])])); // $ExpectError const invalidNumberMap: Map = Map(); diff --git a/type-definitions/ts-tests/ordered-map.ts b/type-definitions/ts-tests/ordered-map.ts index 6def2e22d0..dfe0b421e5 100644 --- a/type-definitions/ts-tests/ordered-map.ts +++ b/type-definitions/ts-tests/ordered-map.ts @@ -12,20 +12,17 @@ import { OrderedMap, List } from '../../'; // $ExpectType OrderedMap<{}, {}> OrderedMap(); - // $ExpectType OrderedMap - OrderedMap([[1, 1]]); + // $ExpectType OrderedMap + OrderedMap([[1, 'a']]); + + // $ExpectType OrderedMap + OrderedMap(List<[number, string]>([[1, 'a']])); // $ExpectType OrderedMap OrderedMap({ a: 1 }); - // $ExpectType OrderedMap - OrderedMap(List.of(List(['a', 'b']))); - - // $ExpectType OrderedMap - OrderedMap(List.of(List([1, 2]))); - - // $ExpectType OrderedMap - OrderedMap(List.of(List(['a', 1]))); +// $ExpectError - TypeScript does not support Lists as tuples + OrderedMap(List([List(['a', 'b'])])); // $ExpectError const invalidNumberOrderedMap: OrderedMap = OrderedMap();