diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 6370dddf49f52..5b0efc2f8882f 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -12296,9 +12296,9 @@ namespace ts {
t.flags & TypeFlags.Intersection ? getApparentTypeOfIntersectionType(t as IntersectionType) :
t.flags & TypeFlags.StringLike ? globalStringType :
t.flags & TypeFlags.NumberLike ? globalNumberType :
- t.flags & TypeFlags.BigIntLike ? getGlobalBigIntType(/*reportErrors*/ languageVersion >= ScriptTarget.ES2020) :
+ t.flags & TypeFlags.BigIntLike ? getGlobalBigIntType() :
t.flags & TypeFlags.BooleanLike ? globalBooleanType :
- t.flags & TypeFlags.ESSymbolLike ? getGlobalESSymbolType(/*reportErrors*/ languageVersion >= ScriptTarget.ES2015) :
+ t.flags & TypeFlags.ESSymbolLike ? getGlobalESSymbolType() :
t.flags & TypeFlags.NonPrimitive ? emptyObjectType :
t.flags & TypeFlags.Index ? keyofConstraintType :
t.flags & TypeFlags.Unknown && !strictNullChecks ? emptyObjectType :
@@ -14024,8 +14024,8 @@ namespace ts {
return deferredGlobalESSymbolConstructorTypeSymbol ||= getGlobalTypeSymbol("SymbolConstructor" as __String, reportErrors);
}
- function getGlobalESSymbolType(reportErrors: boolean) {
- return (deferredGlobalESSymbolType ||= getGlobalType("Symbol" as __String, /*arity*/ 0, reportErrors)) || emptyObjectType;
+ function getGlobalESSymbolType() {
+ return (deferredGlobalESSymbolType ||= getGlobalType("Symbol" as __String, /*arity*/ 0, /*reportErrors*/ false)) || emptyObjectType;
}
function getGlobalPromiseType(reportErrors: boolean) {
@@ -14107,8 +14107,8 @@ namespace ts {
return deferredGlobalAwaitedSymbol === unknownSymbol ? undefined : deferredGlobalAwaitedSymbol;
}
- function getGlobalBigIntType(reportErrors: boolean) {
- return (deferredGlobalBigIntType ||= getGlobalType("BigInt" as __String, /*arity*/ 0, reportErrors)) || emptyObjectType;
+ function getGlobalBigIntType() {
+ return (deferredGlobalBigIntType ||= getGlobalType("BigInt" as __String, /*arity*/ 0, /*reportErrors*/ false)) || emptyObjectType;
}
/**
@@ -18551,7 +18551,7 @@ namespace ts {
if ((globalStringType === source && stringType === target) ||
(globalNumberType === source && numberType === target) ||
(globalBooleanType === source && booleanType === target) ||
- (getGlobalESSymbolType(/*reportErrors*/ false) === source && esSymbolType === target)) {
+ (getGlobalESSymbolType() === source && esSymbolType === target)) {
reportError(Diagnostics._0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible, targetType, sourceType);
}
}
diff --git a/tests/baselines/reference/bigintMissingES2020.errors.txt b/tests/baselines/reference/bigintMissingES2020.errors.txt
deleted file mode 100644
index 768ee7214c8ac..0000000000000
--- a/tests/baselines/reference/bigintMissingES2020.errors.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-error TS2318: Cannot find global type 'BigInt'.
-
-
-!!! error TS2318: Cannot find global type 'BigInt'.
-==== tests/cases/conformance/es2020/bigintMissingES2020.ts (0 errors) ====
- declare function test(): void;
-
- test<{t?: string}, object>();
- test<{t?: string}, bigint>();
-
- // should have global error when bigint is used but ES2020 lib is not present
-
\ No newline at end of file
diff --git a/tests/baselines/reference/bigintMissingES2020.js b/tests/baselines/reference/bigintMissingES2020.js
index 83e2cde68e062..01e8c02089500 100644
--- a/tests/baselines/reference/bigintMissingES2020.js
+++ b/tests/baselines/reference/bigintMissingES2020.js
@@ -4,10 +4,10 @@ declare function test(): void;
test<{t?: string}, object>();
test<{t?: string}, bigint>();
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present
//// [bigintMissingES2020.js]
test();
test();
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present
diff --git a/tests/baselines/reference/bigintMissingES2020.symbols b/tests/baselines/reference/bigintMissingES2020.symbols
index 0757f97759e70..61438c691223f 100644
--- a/tests/baselines/reference/bigintMissingES2020.symbols
+++ b/tests/baselines/reference/bigintMissingES2020.symbols
@@ -13,5 +13,5 @@ test<{t?: string}, bigint>();
>test : Symbol(test, Decl(bigintMissingES2020.ts, 0, 0))
>t : Symbol(t, Decl(bigintMissingES2020.ts, 3, 6))
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present
diff --git a/tests/baselines/reference/bigintMissingES2020.types b/tests/baselines/reference/bigintMissingES2020.types
index 36b26c3a43d01..1be5a9eb27c7c 100644
--- a/tests/baselines/reference/bigintMissingES2020.types
+++ b/tests/baselines/reference/bigintMissingES2020.types
@@ -12,5 +12,5 @@ test<{t?: string}, bigint>();
>test : () => void
>t : string
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present
diff --git a/tests/baselines/reference/bigintMissingESNext.errors.txt b/tests/baselines/reference/bigintMissingESNext.errors.txt
deleted file mode 100644
index 381223a9451ce..0000000000000
--- a/tests/baselines/reference/bigintMissingESNext.errors.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-error TS2318: Cannot find global type 'BigInt'.
-
-
-!!! error TS2318: Cannot find global type 'BigInt'.
-==== tests/cases/conformance/es2020/bigintMissingESNext.ts (0 errors) ====
- declare function test(): void;
-
- test<{t?: string}, object>();
- test<{t?: string}, bigint>();
-
- // should have global error when bigint is used but ES2020 lib is not present
-
\ No newline at end of file
diff --git a/tests/baselines/reference/bigintMissingESNext.js b/tests/baselines/reference/bigintMissingESNext.js
index 5029ca536c28a..300fbe5db5f4f 100644
--- a/tests/baselines/reference/bigintMissingESNext.js
+++ b/tests/baselines/reference/bigintMissingESNext.js
@@ -4,10 +4,10 @@ declare function test(): void;
test<{t?: string}, object>();
test<{t?: string}, bigint>();
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present
//// [bigintMissingESNext.js]
test();
test();
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present
diff --git a/tests/baselines/reference/bigintMissingESNext.symbols b/tests/baselines/reference/bigintMissingESNext.symbols
index bd500ba04b04e..a517f40d9717f 100644
--- a/tests/baselines/reference/bigintMissingESNext.symbols
+++ b/tests/baselines/reference/bigintMissingESNext.symbols
@@ -13,5 +13,5 @@ test<{t?: string}, bigint>();
>test : Symbol(test, Decl(bigintMissingESNext.ts, 0, 0))
>t : Symbol(t, Decl(bigintMissingESNext.ts, 3, 6))
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present
diff --git a/tests/baselines/reference/bigintMissingESNext.types b/tests/baselines/reference/bigintMissingESNext.types
index 6665aac1d5c9b..d34f9e5250e09 100644
--- a/tests/baselines/reference/bigintMissingESNext.types
+++ b/tests/baselines/reference/bigintMissingESNext.types
@@ -12,5 +12,5 @@ test<{t?: string}, bigint>();
>test : () => void
>t : string
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present
diff --git a/tests/baselines/reference/contextualSignatureInObjectFreeze.js b/tests/baselines/reference/contextualSignatureInObjectFreeze.js
new file mode 100644
index 0000000000000..e25ef7ab24799
--- /dev/null
+++ b/tests/baselines/reference/contextualSignatureInObjectFreeze.js
@@ -0,0 +1,13 @@
+//// [contextualSignatureInObjectFreeze.ts]
+// #49101
+
+Object.freeze({
+ f: function () { }
+})
+
+
+//// [contextualSignatureInObjectFreeze.js]
+// #49101
+Object.freeze({
+ f: function () { }
+});
diff --git a/tests/baselines/reference/contextualSignatureInObjectFreeze.symbols b/tests/baselines/reference/contextualSignatureInObjectFreeze.symbols
new file mode 100644
index 0000000000000..68e9d81c60076
--- /dev/null
+++ b/tests/baselines/reference/contextualSignatureInObjectFreeze.symbols
@@ -0,0 +1,13 @@
+=== tests/cases/compiler/contextualSignatureInObjectFreeze.ts ===
+// #49101
+
+Object.freeze({
+>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, --, --))
+>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
+>freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
+
+ f: function () { }
+>f : Symbol(f, Decl(contextualSignatureInObjectFreeze.ts, 2, 15))
+
+})
+
diff --git a/tests/baselines/reference/contextualSignatureInObjectFreeze.types b/tests/baselines/reference/contextualSignatureInObjectFreeze.types
new file mode 100644
index 0000000000000..a2d8418cbf0b0
--- /dev/null
+++ b/tests/baselines/reference/contextualSignatureInObjectFreeze.types
@@ -0,0 +1,16 @@
+=== tests/cases/compiler/contextualSignatureInObjectFreeze.ts ===
+// #49101
+
+Object.freeze({
+>Object.freeze({ f: function () { }}) : Readonly<{ f: () => void; }>
+>Object.freeze : { (a: T[]): readonly T[]; (f: T): T; (o: T): Readonly; (o: T): Readonly; }
+>Object : ObjectConstructor
+>freeze : { (a: T[]): readonly T[]; (f: T): T; (o: T): Readonly; (o: T): Readonly; }
+>{ f: function () { }} : { f: () => void; }
+
+ f: function () { }
+>f : () => void
+>function () { } : () => void
+
+})
+
diff --git a/tests/cases/compiler/contextualSignatureInObjectFreeze.ts b/tests/cases/compiler/contextualSignatureInObjectFreeze.ts
new file mode 100644
index 0000000000000..1f2c561c13da5
--- /dev/null
+++ b/tests/cases/compiler/contextualSignatureInObjectFreeze.ts
@@ -0,0 +1,7 @@
+// #49101
+// @target: es2020
+// @lib: es2019
+
+Object.freeze({
+ f: function () { }
+})
diff --git a/tests/cases/conformance/es2020/bigintMissingES2020.ts b/tests/cases/conformance/es2020/bigintMissingES2020.ts
index dc2f459e034f5..bd378f411eb96 100644
--- a/tests/cases/conformance/es2020/bigintMissingES2020.ts
+++ b/tests/cases/conformance/es2020/bigintMissingES2020.ts
@@ -5,4 +5,4 @@ declare function test(): void;
test<{t?: string}, object>();
test<{t?: string}, bigint>();
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present
diff --git a/tests/cases/conformance/es2020/bigintMissingESNext.ts b/tests/cases/conformance/es2020/bigintMissingESNext.ts
index f3d90f64bde45..8ea758777cc79 100644
--- a/tests/cases/conformance/es2020/bigintMissingESNext.ts
+++ b/tests/cases/conformance/es2020/bigintMissingESNext.ts
@@ -5,4 +5,4 @@ declare function test(): void;
test<{t?: string}, object>();
test<{t?: string}, bigint>();
-// should have global error when bigint is used but ES2020 lib is not present
+// no error when bigint is used even when ES2020 lib is not present