Skip to content

Commit 82eabf4

Browse files
committed
es2015.collection
1 parent cf6ad99 commit 82eabf4

File tree

3 files changed

+150
-1
lines changed

3 files changed

+150
-1
lines changed

build/replacement.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@ export const replacement = new Set<string>([
66
"IArguments",
77
"JSON",
88
"ArrayConstructor",
9+
// lib.es2015.collection.d.ts
10+
"Map",
11+
"MapConstructor",
12+
"WeakMap",
13+
"WeakMapConstructor",
14+
"ReadonlyMap",
15+
"Set",
16+
"SetConstructor",
17+
"ReadonlySet",
918
]);
1019

11-
export const betterLibs = new Set<string>(["lib.es5.d.ts"]);
20+
export const betterLibs = new Set<string>([
21+
"lib.es5.d.ts",
22+
"lib.es2015.collection.d.ts",
23+
]);

lib/lib.es2015.collection.d.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
interface Map<K, V> {
2+
clear(): void;
3+
delete(key: K): boolean;
4+
forEach<This>(
5+
callbackfn: (this: This, value: V, key: K, map: Map<K, V>) => void,
6+
thisArg?: This
7+
): void;
8+
get(key: K): V | undefined;
9+
has(key: K): boolean;
10+
set(key: K, value: V): this;
11+
readonly size: number;
12+
}
13+
14+
interface MapConstructor {
15+
new <K, V>(entries?: readonly (readonly [K, V])[] | null): Map<K, V>;
16+
readonly prototype: Map<unknown, unknown>;
17+
}
18+
19+
declare var Map: MapConstructor;
20+
21+
interface WeakMap<K extends object, V> {
22+
delete(key: K): boolean;
23+
get(key: K): V | undefined;
24+
has(key: K): boolean;
25+
set(key: K, value: V): this;
26+
}
27+
28+
interface WeakMapConstructor {
29+
new <K extends object = object, V = unknown>(
30+
entries?: readonly [K, V][] | null
31+
): WeakMap<K, V>;
32+
readonly prototype: WeakMap<object, unknown>;
33+
}
34+
declare var WeakMap: WeakMapConstructor;
35+
36+
interface ReadonlyMap<K, V> {
37+
forEach<This>(
38+
callbackfn: (this: This, value: V, key: K, map: ReadonlyMap<K, V>) => void,
39+
thisArg?: This
40+
): void;
41+
get(key: K): V | undefined;
42+
has(key: K): boolean;
43+
readonly size: number;
44+
}
45+
46+
interface Set<T> {
47+
add(value: T): this;
48+
clear(): void;
49+
delete(value: T): boolean;
50+
forEach<This>(
51+
callbackfn: (this: This, value: T, value2: T, set: Set<T>) => void,
52+
thisArg?: This
53+
): void;
54+
has(value: T): boolean;
55+
readonly size: number;
56+
}
57+
58+
interface SetConstructor {
59+
new <T>(values?: readonly T[] | null): Set<T>;
60+
readonly prototype: Set<unknown>;
61+
}
62+
declare var Set: SetConstructor;
63+
64+
interface ReadonlySet<T> {
65+
forEach<This>(
66+
callbackfn: (this: This, value: T, value2: T, set: ReadonlySet<T>) => void,
67+
thisArg?: This
68+
): void;
69+
has(value: T): boolean;
70+
readonly size: number;
71+
}

tests/es2015.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/// <reference path="../dist/lib/lib.es2015.d.ts" />
2+
3+
import { expectType } from "tsd";
4+
5+
// Map
6+
{
7+
const map: Map<string, number> = new Map();
8+
9+
map.forEach((v, k) => {
10+
expectType<undefined>(this);
11+
expectType<number>(v);
12+
expectType<string>(k);
13+
});
14+
map.forEach((v, k) => {
15+
expectType<undefined>(this);
16+
expectType<number>(v);
17+
expectType<string>(k);
18+
}, {});
19+
map.forEach(
20+
function () {
21+
expectType<string>(this.foo);
22+
},
23+
{ foo: "foo" }
24+
);
25+
26+
const map2 = new Map();
27+
expectType<Map<unknown, unknown>>(map2);
28+
expectType<unknown>(map2.get("a"));
29+
30+
const map3 = new Map<string, number>();
31+
expectType<Map<string, number>>(map3);
32+
33+
expectType<Map<unknown, unknown>>(Map.prototype);
34+
}
35+
// WeakMap
36+
{
37+
const map: WeakMap<object, number> = new WeakMap();
38+
expectType<WeakMap<object, number>>(map);
39+
40+
const map2 = new WeakMap();
41+
expectType<WeakMap<object, unknown>>(map2);
42+
expectType<unknown>(map2.get({}));
43+
44+
expectType<WeakMap<object, unknown>>(WeakMap.prototype);
45+
}
46+
// Set
47+
{
48+
const set = new Set();
49+
expectType<Set<unknown>>(set);
50+
51+
const set2 = new Set([1, 2, 3]);
52+
set2.forEach((v) => {
53+
expectType<undefined>(this);
54+
expectType<number>(v);
55+
});
56+
set2.forEach((v) => {
57+
expectType<undefined>(this);
58+
expectType<number>(v);
59+
}, {});
60+
set2.forEach(
61+
function () {
62+
expectType<string>(this.foo);
63+
},
64+
{ foo: "foo" }
65+
);
66+
}

0 commit comments

Comments
 (0)