Skip to content

Commit ca65a1a

Browse files
authored
Add boolean to supported literals within Object.freeze (#48117)
1 parent 995e0a0 commit ca65a1a

10 files changed

+35
-32
lines changed

src/lib/es5.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ interface ObjectConstructor {
210210
* Prevents the modification of existing property attributes and values, and prevents the addition of new properties.
211211
* @param o Object on which to lock the attributes.
212212
*/
213-
freeze<T extends {[idx: string]: U | null | undefined | object}, U extends string | bigint | number | symbol>(o: T): Readonly<T>;
213+
freeze<T extends {[idx: string]: U | null | undefined | object}, U extends string | bigint | number | boolean | symbol>(o: T): Readonly<T>;
214214

215215
/**
216216
* Prevents the modification of existing property attributes and values, and prevents the addition of new properties.

tests/baselines/reference/circularContextualReturnType.types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33

44
Object.freeze({
55
>Object.freeze({ foo() { return Object.freeze('a'); },}) : Readonly<{ foo(): string; }>
6-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
6+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
77
>Object : ObjectConstructor
8-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
8+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
99
>{ foo() { return Object.freeze('a'); },} : { foo(): string; }
1010

1111
foo() {
1212
>foo : () => string
1313

1414
return Object.freeze('a');
1515
>Object.freeze('a') : string
16-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
16+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
1717
>Object : ObjectConstructor
18-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
18+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
1919
>'a' : "a"
2020

2121
},

tests/baselines/reference/jsEnumTagOnObjectFrozen.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ cbThing(type => {
4949
const Thing = Object.freeze({
5050
>Thing : Readonly<{ a: "thing"; b: "chill"; }>
5151
>Object.freeze({ a: "thing", b: "chill"}) : Readonly<{ a: "thing"; b: "chill"; }>
52-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
52+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
5353
>Object : ObjectConstructor
54-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
54+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
5555
>{ a: "thing", b: "chill"} : { a: "thing"; b: "chill"; }
5656

5757
a: "thing",

tests/baselines/reference/keyofAndIndexedAccess.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1876,9 +1876,9 @@ class SampleClass<P> {
18761876
>this : this
18771877
>props : Readonly<P>
18781878
>Object.freeze(props) : Readonly<P>
1879-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
1879+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
18801880
>Object : ObjectConstructor
1881-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
1881+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U | null | undefined; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
18821882
>props : P
18831883
}
18841884
}

tests/baselines/reference/objectFreeze.errors.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ tests/cases/compiler/objectFreeze.ts(12,3): error TS2540: Cannot assign to 'b' b
1818
~~~~
1919
!!! error TS2542: Index signature in type 'readonly number[]' only permits reading.
2020

21-
const o = Object.freeze({ a: 1, b: "string" });
21+
const o = Object.freeze({ a: 1, b: "string", c: true });
2222
o.b = o.a.toString();
2323
~
2424
!!! error TS2540: Cannot assign to 'b' because it is a read-only property.

tests/baselines/reference/objectFreeze.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ new c(1);
99
const a = Object.freeze([1, 2, 3]);
1010
a[0] = a[2].toString();
1111

12-
const o = Object.freeze({ a: 1, b: "string" });
12+
const o = Object.freeze({ a: 1, b: "string", c: true });
1313
o.b = o.a.toString();
1414

1515

@@ -25,5 +25,5 @@ var c = Object.freeze(C);
2525
new c(1);
2626
var a = Object.freeze([1, 2, 3]);
2727
a[0] = a[2].toString();
28-
var o = Object.freeze({ a: 1, b: "string" });
28+
var o = Object.freeze({ a: 1, b: "string", c: true });
2929
o.b = o.a.toString();

tests/baselines/reference/objectFreeze.symbols

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ a[0] = a[2].toString();
3737
>a : Symbol(a, Decl(objectFreeze.ts, 7, 5))
3838
>toString : Symbol(Number.toString, Decl(lib.es5.d.ts, --, --))
3939

40-
const o = Object.freeze({ a: 1, b: "string" });
40+
const o = Object.freeze({ a: 1, b: "string", c: true });
4141
>o : Symbol(o, Decl(objectFreeze.ts, 10, 5))
4242
>Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
4343
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
4444
>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
4545
>a : Symbol(a, Decl(objectFreeze.ts, 10, 25))
4646
>b : Symbol(b, Decl(objectFreeze.ts, 10, 31))
47+
>c : Symbol(c, Decl(objectFreeze.ts, 10, 44))
4748

4849
o.b = o.a.toString();
4950
>o.b : Symbol(b, Decl(objectFreeze.ts, 10, 31))

tests/baselines/reference/objectFreeze.types

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
const f = Object.freeze(function foo(a: number, b: string) { return false; });
33
>f : (a: number, b: string) => false
44
>Object.freeze(function foo(a: number, b: string) { return false; }) : (a: number, b: string) => false
5-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
5+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
66
>Object : ObjectConstructor
7-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
7+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
88
>function foo(a: number, b: string) { return false; } : (a: number, b: string) => false
99
>foo : (a: number, b: string) => false
1010
>a : number
@@ -26,9 +26,9 @@ class C { constructor(a: number) { } }
2626
const c = Object.freeze(C);
2727
>c : typeof C
2828
>Object.freeze(C) : typeof C
29-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
29+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
3030
>Object : ObjectConstructor
31-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
31+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
3232
>C : typeof C
3333

3434
new c(1);
@@ -39,9 +39,9 @@ new c(1);
3939
const a = Object.freeze([1, 2, 3]);
4040
>a : readonly number[]
4141
>Object.freeze([1, 2, 3]) : readonly number[]
42-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
42+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
4343
>Object : ObjectConstructor
44-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
44+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
4545
>[1, 2, 3] : number[]
4646
>1 : 1
4747
>2 : 2
@@ -59,27 +59,29 @@ a[0] = a[2].toString();
5959
>2 : 2
6060
>toString : (radix?: number) => string
6161

62-
const o = Object.freeze({ a: 1, b: "string" });
63-
>o : Readonly<{ a: 1; b: "string"; }>
64-
>Object.freeze({ a: 1, b: "string" }) : Readonly<{ a: 1; b: "string"; }>
65-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
62+
const o = Object.freeze({ a: 1, b: "string", c: true });
63+
>o : Readonly<{ a: 1; b: "string"; c: true; }>
64+
>Object.freeze({ a: 1, b: "string", c: true }) : Readonly<{ a: 1; b: "string"; c: true; }>
65+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
6666
>Object : ObjectConstructor
67-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
68-
>{ a: 1, b: "string" } : { a: 1; b: "string"; }
67+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
68+
>{ a: 1, b: "string", c: true } : { a: 1; b: "string"; c: true; }
6969
>a : 1
7070
>1 : 1
7171
>b : "string"
7272
>"string" : "string"
73+
>c : true
74+
>true : true
7375

7476
o.b = o.a.toString();
7577
>o.b = o.a.toString() : string
7678
>o.b : any
77-
>o : Readonly<{ a: 1; b: "string"; }>
79+
>o : Readonly<{ a: 1; b: "string"; c: true; }>
7880
>b : any
7981
>o.a.toString() : string
8082
>o.a.toString : (radix?: number) => string
8183
>o.a : 1
82-
>o : Readonly<{ a: 1; b: "string"; }>
84+
>o : Readonly<{ a: 1; b: "string"; c: true; }>
8385
>a : 1
8486
>toString : (radix?: number) => string
8587

tests/baselines/reference/objectFromEntries.types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ const o3 = Object.fromEntries(new Map([[Symbol("key"), "value"]]));
4343
const frozenArray = Object.freeze([['a', 1], ['b', 2], ['c', 3]]);
4444
>frozenArray : readonly (string | number)[][]
4545
>Object.freeze([['a', 1], ['b', 2], ['c', 3]]) : readonly (string | number)[][]
46-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
46+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
4747
>Object : ObjectConstructor
48-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
48+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
4949
>[['a', 1], ['b', 2], ['c', 3]] : (string | number)[][]
5050
>['a', 1] : (string | number)[]
5151
>'a' : "a"
@@ -68,9 +68,9 @@ const o4 = Object.fromEntries(frozenArray);
6868
const frozenArray2: readonly [string, number][] = Object.freeze([['a', 1], ['b', 2], ['c', 3]]);
6969
>frozenArray2 : readonly [string, number][]
7070
>Object.freeze([['a', 1], ['b', 2], ['c', 3]]) : readonly [string, number][]
71-
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
71+
>Object.freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
7272
>Object : ObjectConstructor
73-
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
73+
>freeze : { <T>(a: T[]): readonly T[]; <T extends Function>(f: T): T; <T extends { [idx: string]: object | U; }, U extends string | number | bigint | boolean | symbol>(o: T): Readonly<T>; <T>(o: T): Readonly<T>; }
7474
>[['a', 1], ['b', 2], ['c', 3]] : [string, number][]
7575
>['a', 1] : [string, number]
7676
>'a' : "a"

tests/cases/compiler/objectFreeze.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ new c(1);
88
const a = Object.freeze([1, 2, 3]);
99
a[0] = a[2].toString();
1010

11-
const o = Object.freeze({ a: 1, b: "string" });
11+
const o = Object.freeze({ a: 1, b: "string", c: true });
1212
o.b = o.a.toString();

0 commit comments

Comments
 (0)