Consolidate overloads in constructors for Map, Set, WeakMap, and WeakSet

Fixes https://github.com/Microsoft/TypeScript/issues/23551
Fixes https://github.com/Microsoft/TypeScript/issues/25362
This commit is contained in:
Mohamed Hegazy 2018-07-02 11:53:17 -07:00
parent 7dc66e916a
commit 4dd1f9fc7c
6 changed files with 118 additions and 9 deletions

View File

@ -9,8 +9,7 @@ interface Map<K, V> {
}
interface MapConstructor {
new (): Map<any, any>;
new <K, V>(entries?: ReadonlyArray<[K, V]> | null): Map<K, V>;
new <K = any, V = any>(entries?: ReadonlyArray<[K, V]> | null): Map<K, V>;
readonly prototype: Map<any, any>;
}
declare var Map: MapConstructor;
@ -45,8 +44,7 @@ interface Set<T> {
}
interface SetConstructor {
new (): Set<any>;
new <T>(values?: ReadonlyArray<T> | null): Set<T>;
new <T = any>(values?: ReadonlyArray<T> | null): Set<T>;
readonly prototype: Set<any>;
}
declare var Set: SetConstructor;
@ -64,8 +62,7 @@ interface WeakSet<T extends object> {
}
interface WeakSetConstructor {
new (): WeakSet<object>;
new <T extends object>(values?: ReadonlyArray<T> | null): WeakSet<T>;
new <T extends object = object>(values?: ReadonlyArray<T> | null): WeakSet<T>;
readonly prototype: WeakSet<object>;
}
declare var WeakSet: WeakSetConstructor;

View File

@ -135,7 +135,7 @@ interface MapConstructor {
interface WeakMap<K extends object, V> { }
interface WeakMapConstructor {
new <K extends object, V>(iterable: Iterable<[K, V]>): WeakMap<K, V>;
new <K extends object = object, V = any>(iterable: Iterable<[K, V]>): WeakMap<K, V>;
}
interface Set<T> {
@ -183,7 +183,7 @@ interface SetConstructor {
interface WeakSet<T extends object> { }
interface WeakSetConstructor {
new <T extends object>(iterable: Iterable<T>): WeakSet<T>;
new <T extends object = object>(iterable: Iterable<T>): WeakSet<T>;
}
interface Promise<T> { }

View File

@ -2,7 +2,7 @@
const strSet: Set<string> = new Set()
>strSet : Set<string>
>Set : Set<T>
>new Set() : Set<any>
>new Set() : Set<string>
>Set : SetConstructor
strSet.add('Hello')

View File

@ -0,0 +1,40 @@
=== tests/cases/compiler/extendingSetWithCheckJs.ts ===
class MySet extends Set {
>MySet : Symbol(MySet, Decl(extendingSetWithCheckJs.ts, 0, 0))
>Set : Symbol(Set, 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, --, --))
constructor() {
super();
>super : Symbol(SetConstructor, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
}
}
class MyWeakSet extends WeakSet {
>MyWeakSet : Symbol(MyWeakSet, Decl(extendingSetWithCheckJs.ts, 4, 1))
>WeakSet : Symbol(WeakSet, 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, --, --))
constructor() {
super();
>super : Symbol(WeakSetConstructor, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
}
}
class MyMap extends Map {
>MyMap : Symbol(MyMap, Decl(extendingSetWithCheckJs.ts, 10, 1))
>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, --, --))
constructor() {
super();
>super : Symbol(MapConstructor, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
}
}
class MyWeakMap extends WeakMap {
>MyWeakMap : Symbol(MyWeakMap, Decl(extendingSetWithCheckJs.ts, 16, 1))
>WeakMap : Symbol(WeakMap, 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, --, --))
constructor() {
super();
>super : Symbol(WeakMapConstructor, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
}
}

View File

@ -0,0 +1,44 @@
=== tests/cases/compiler/extendingSetWithCheckJs.ts ===
class MySet extends Set {
>MySet : MySet
>Set : Set<any>
constructor() {
super();
>super() : void
>super : SetConstructor
}
}
class MyWeakSet extends WeakSet {
>MyWeakSet : MyWeakSet
>WeakSet : WeakSet<object>
constructor() {
super();
>super() : void
>super : WeakSetConstructor
}
}
class MyMap extends Map {
>MyMap : MyMap
>Map : Map<any, any>
constructor() {
super();
>super() : void
>super : MapConstructor
}
}
class MyWeakMap extends WeakMap {
>MyWeakMap : MyWeakMap
>WeakMap : WeakMap<object, any>
constructor() {
super();
>super() : void
>super : WeakMapConstructor
}
}

View File

@ -0,0 +1,28 @@
// @allowJs: true
// @checkJs: true
// @noEmit: true
// @lib: es2017
class MySet extends Set {
constructor() {
super();
}
}
class MyWeakSet extends WeakSet {
constructor() {
super();
}
}
class MyMap extends Map {
constructor() {
super();
}
}
class MyWeakMap extends WeakMap {
constructor() {
super();
}
}