Skip to content

Commit f4c68f0

Browse files
committed
Fix definition of Array.prototype[Symbol.unscopables]
1 parent 1622247 commit f4c68f0

12 files changed

+37
-33
lines changed

src/lib/es2015.symbol.wellknown.d.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ interface SymbolConstructor {
5656
readonly toStringTag: unique symbol;
5757

5858
/**
59-
* An Object whose own property names are property names that are excluded from the 'with'
59+
* An Object whose truthy properties are properties that are excluded from the 'with'
6060
* environment bindings of the associated objects.
6161
*/
6262
readonly unscopables: unique symbol;
@@ -73,17 +73,21 @@ interface Symbol {
7373

7474
interface Array<T> {
7575
/**
76-
* Returns an object whose properties have the value 'true'
76+
* Is an object whose properties have the value 'true'
7777
* when they will be absent when used in a 'with' statement.
7878
*/
79-
[Symbol.unscopables](): {
80-
copyWithin: boolean;
81-
entries: boolean;
82-
fill: boolean;
83-
find: boolean;
84-
findIndex: boolean;
85-
keys: boolean;
86-
values: boolean;
79+
readonly [Symbol.unscopables]: {
80+
[K in keyof any[]]?: boolean;
81+
};
82+
}
83+
84+
interface ReadonlyArray<T> {
85+
/**
86+
* Is an object whose properties have the value 'true'
87+
* when they will be absent when used in a 'with' statement.
88+
*/
89+
readonly [Symbol.unscopables]: {
90+
[K in keyof readonly any[]]?: boolean;
8791
};
8892
}
8993

tests/baselines/reference/accessorsOverrideProperty9.symbols

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class ApiItem {
2929

3030
public get members(): ReadonlyArray<ApiItem> {
3131
>members : Symbol(ApiItem.members, Decl(accessorsOverrideProperty9.ts, 9, 15))
32-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --))
32+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --))
3333
>ApiItem : Symbol(ApiItem, Decl(accessorsOverrideProperty9.ts, 6, 91))
3434

3535
return [];
@@ -49,7 +49,7 @@ interface ApiItemContainerMixin extends ApiItem {
4949

5050
readonly members: ReadonlyArray<ApiItem>;
5151
>members : Symbol(ApiItemContainerMixin.members, Decl(accessorsOverrideProperty9.ts, 20, 49))
52-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --))
52+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --))
5353
>ApiItem : Symbol(ApiItem, Decl(accessorsOverrideProperty9.ts, 6, 91))
5454
}
5555

@@ -82,7 +82,7 @@ function ApiItemContainerMixin<TBaseClass extends IApiItemConstructor>(
8282

8383
public get members(): ReadonlyArray<ApiItem> {
8484
>members : Symbol(MixedClass.members, Decl(accessorsOverrideProperty9.ts, 30, 5))
85-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --))
85+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --))
8686
>ApiItem : Symbol(ApiItem, Decl(accessorsOverrideProperty9.ts, 6, 91))
8787

8888
return [];
@@ -102,7 +102,7 @@ export class ApiEnum extends ApiItemContainerMixin(ApiItem) {
102102
// This worked prior to TypeScript 4.0:
103103
public get members(): ReadonlyArray<ApiEnumMember> {
104104
>members : Symbol(ApiEnum.members, Decl(accessorsOverrideProperty9.ts, 41, 61))
105-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --))
105+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --))
106106
>ApiEnumMember : Symbol(ApiEnumMember, Decl(accessorsOverrideProperty9.ts, 13, 1))
107107

108108
return [];

tests/baselines/reference/arrayFakeFlatNoCrashInferenceDeclarations.symbols

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ type BadFlatArray<Arr, Depth extends number> = {obj: {
1212
"recur": Arr extends ReadonlyArray<infer InnerArr>
1313
>"recur" : Symbol("recur", Decl(arrayFakeFlatNoCrashInferenceDeclarations.ts, 1, 16))
1414
>Arr : Symbol(Arr, Decl(arrayFakeFlatNoCrashInferenceDeclarations.ts, 0, 18))
15-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --))
15+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --) ... and 1 more)
1616
>InnerArr : Symbol(InnerArr, Decl(arrayFakeFlatNoCrashInferenceDeclarations.ts, 2, 44))
1717

1818
? BadFlatArray<InnerArr, [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20][Depth]>

tests/baselines/reference/arrayFind.symbols

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const foundNumber: number | undefined = arrayOfStringsNumbersAndBooleans.find(is
2222
const readonlyArrayOfStringsNumbersAndBooleans = arrayOfStringsNumbersAndBooleans as ReadonlyArray<string | number | boolean>;
2323
>readonlyArrayOfStringsNumbersAndBooleans : Symbol(readonlyArrayOfStringsNumbersAndBooleans, Decl(arrayFind.ts, 8, 5))
2424
>arrayOfStringsNumbersAndBooleans : Symbol(arrayOfStringsNumbersAndBooleans, Decl(arrayFind.ts, 5, 5))
25-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
25+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
2626

2727
const readonlyFoundNumber: number | undefined = readonlyArrayOfStringsNumbersAndBooleans.find(isNumber);
2828
>readonlyFoundNumber : Symbol(readonlyFoundNumber, Decl(arrayFind.ts, 9, 5))

tests/baselines/reference/arrayFlatMap.symbols

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ const array: number[] = [];
44

55
const readonlyArray: ReadonlyArray<number> = [];
66
>readonlyArray : Symbol(readonlyArray, Decl(arrayFlatMap.ts, 1, 5))
7-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --))
7+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --) ... and 1 more)
88

99
array.flatMap((): ReadonlyArray<number> => []); // ok
1010
>array.flatMap : Symbol(Array.flatMap, Decl(lib.es2019.array.d.ts, --, --))
1111
>array : Symbol(array, Decl(arrayFlatMap.ts, 0, 5))
1212
>flatMap : Symbol(Array.flatMap, Decl(lib.es2019.array.d.ts, --, --))
13-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --))
13+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --) ... and 1 more)
1414

1515
readonlyArray.flatMap((): ReadonlyArray<number> => []); // ok
1616
>readonlyArray.flatMap : Symbol(ReadonlyArray.flatMap, Decl(lib.es2019.array.d.ts, --, --))
1717
>readonlyArray : Symbol(readonlyArray, Decl(arrayFlatMap.ts, 1, 5))
1818
>flatMap : Symbol(ReadonlyArray.flatMap, Decl(lib.es2019.array.d.ts, --, --))
19-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --))
19+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --) ... and 1 more)
2020

tests/baselines/reference/callWithSpread4.symbols

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ declare const pli: {
3030

3131
(streams: ReadonlyArray<R | W | RW>): Promise<void>;
3232
>streams : Symbol(streams, Decl(callWithSpread4.ts, 5, 5))
33-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --) ... and 1 more)
33+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --) ... and 2 more)
3434
>R : Symbol(R, Decl(callWithSpread4.ts, 0, 0))
3535
>W : Symbol(W, Decl(callWithSpread4.ts, 0, 22))
3636
>RW : Symbol(RW, Decl(callWithSpread4.ts, 1, 22))

tests/baselines/reference/intersectionTypeInference3.symbols

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ declare function from<T>(): T[];
5252

5353
const c2: ReadonlyArray<A> = from();
5454
>c2 : Symbol(c2, Decl(intersectionTypeInference3.ts, 16, 5))
55-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --))
55+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
5656
>A : Symbol(A, Decl(intersectionTypeInference3.ts, 4, 2))
5757
>from : Symbol(from, Decl(intersectionTypeInference3.ts, 11, 47))
5858

tests/baselines/reference/keyofAndIndexedAccess2.symbols

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ function fn2<T extends Array<string>>(param: T, cb: (element: T[number]) => void
476476
function fn3<T extends ReadonlyArray<string>>(param: T, cb: (element: T[number]) => void) {
477477
>fn3 : Symbol(fn3, Decl(keyofAndIndexedAccess2.ts, 125, 1))
478478
>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 129, 13))
479-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --) ... and 1 more)
479+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --) ... and 2 more)
480480
>param : Symbol(param, Decl(keyofAndIndexedAccess2.ts, 129, 46))
481481
>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 129, 13))
482482
>cb : Symbol(cb, Decl(keyofAndIndexedAccess2.ts, 129, 55))
@@ -499,7 +499,7 @@ function fn4<K extends number>() {
499499

500500
let y: ReadonlyArray<string>[K] = 'abc';
501501
>y : Symbol(y, Decl(keyofAndIndexedAccess2.ts, 135, 7))
502-
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --), Decl(lib.es2019.array.d.ts, --, --) ... and 1 more)
502+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2016.array.include.d.ts, --, --) ... and 2 more)
503503
>K : Symbol(K, Decl(keyofAndIndexedAccess2.ts, 133, 13))
504504
}
505505

0 commit comments

Comments
 (0)