From 027d65a92031ac49036f456458702165c8b78554 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 13 Mar 2019 14:52:13 -0700 Subject: [PATCH] Fix map constructor to accept readonly tuple Fixes #29721 --- src/lib/es2015.collection.d.ts | 2 +- src/lib/es2015.iterable.d.ts | 2 +- .../reference/mapConstructorOnReadonlyTuple.js | 7 +++++++ .../mapConstructorOnReadonlyTuple.symbols | 8 ++++++++ .../mapConstructorOnReadonlyTuple.types | 17 +++++++++++++++++ .../compiler/mapConstructorOnReadonlyTuple.ts | 4 ++++ 6 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/mapConstructorOnReadonlyTuple.js create mode 100644 tests/baselines/reference/mapConstructorOnReadonlyTuple.symbols create mode 100644 tests/baselines/reference/mapConstructorOnReadonlyTuple.types create mode 100644 tests/cases/compiler/mapConstructorOnReadonlyTuple.ts diff --git a/src/lib/es2015.collection.d.ts b/src/lib/es2015.collection.d.ts index 34afa3d1b2b..4f293f0f6c3 100644 --- a/src/lib/es2015.collection.d.ts +++ b/src/lib/es2015.collection.d.ts @@ -10,7 +10,7 @@ interface Map { interface MapConstructor { new(): Map; - new(entries?: ReadonlyArray<[K, V]> | null): Map; + new(entries?: ReadonlyArray | null): Map; readonly prototype: Map; } declare var Map: MapConstructor; diff --git a/src/lib/es2015.iterable.d.ts b/src/lib/es2015.iterable.d.ts index f0a38dff3fe..b679bea14d5 100644 --- a/src/lib/es2015.iterable.d.ts +++ b/src/lib/es2015.iterable.d.ts @@ -129,7 +129,7 @@ interface ReadonlyMap { } interface MapConstructor { - new (iterable: Iterable<[K, V]>): Map; + new (iterable: Iterable): Map; } interface WeakMap { } diff --git a/tests/baselines/reference/mapConstructorOnReadonlyTuple.js b/tests/baselines/reference/mapConstructorOnReadonlyTuple.js new file mode 100644 index 00000000000..af2a3b20b4c --- /dev/null +++ b/tests/baselines/reference/mapConstructorOnReadonlyTuple.js @@ -0,0 +1,7 @@ +//// [mapConstructorOnReadonlyTuple.ts] +const pairs = [['1', 1], ['2', 2]] as const +new Map(pairs); + +//// [mapConstructorOnReadonlyTuple.js] +const pairs = [['1', 1], ['2', 2]]; +new Map(pairs); diff --git a/tests/baselines/reference/mapConstructorOnReadonlyTuple.symbols b/tests/baselines/reference/mapConstructorOnReadonlyTuple.symbols new file mode 100644 index 00000000000..8811f5b92db --- /dev/null +++ b/tests/baselines/reference/mapConstructorOnReadonlyTuple.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/mapConstructorOnReadonlyTuple.ts === +const pairs = [['1', 1], ['2', 2]] as const +>pairs : Symbol(pairs, Decl(mapConstructorOnReadonlyTuple.ts, 0, 5)) + +new Map(pairs); +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>pairs : Symbol(pairs, Decl(mapConstructorOnReadonlyTuple.ts, 0, 5)) + diff --git a/tests/baselines/reference/mapConstructorOnReadonlyTuple.types b/tests/baselines/reference/mapConstructorOnReadonlyTuple.types new file mode 100644 index 00000000000..44fc38fa797 --- /dev/null +++ b/tests/baselines/reference/mapConstructorOnReadonlyTuple.types @@ -0,0 +1,17 @@ +=== tests/cases/compiler/mapConstructorOnReadonlyTuple.ts === +const pairs = [['1', 1], ['2', 2]] as const +>pairs : readonly [readonly ["1", 1], readonly ["2", 2]] +>[['1', 1], ['2', 2]] as const : readonly [readonly ["1", 1], readonly ["2", 2]] +>[['1', 1], ['2', 2]] : readonly [readonly ["1", 1], readonly ["2", 2]] +>['1', 1] : readonly ["1", 1] +>'1' : "1" +>1 : 1 +>['2', 2] : readonly ["2", 2] +>'2' : "2" +>2 : 2 + +new Map(pairs); +>new Map(pairs) : Map<"1" | "2", 1 | 2> +>Map : MapConstructor +>pairs : readonly [readonly ["1", 1], readonly ["2", 2]] + diff --git a/tests/cases/compiler/mapConstructorOnReadonlyTuple.ts b/tests/cases/compiler/mapConstructorOnReadonlyTuple.ts new file mode 100644 index 00000000000..f4914e67def --- /dev/null +++ b/tests/cases/compiler/mapConstructorOnReadonlyTuple.ts @@ -0,0 +1,4 @@ +// @target: es2015 + +const pairs = [['1', 1], ['2', 2]] as const +new Map(pairs); \ No newline at end of file