diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6370dddf49f..5b0efc2f888 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 768ee7214c8..00000000000 --- 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 83e2cde68e0..01e8c020895 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 0757f97759e..61438c69122 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 36b26c3a43d..1be5a9eb27c 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 381223a9451..00000000000 --- 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 5029ca536c2..300fbe5db5f 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 bd500ba04b0..a517f40d971 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 6665aac1d5c..d34f9e5250e 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 00000000000..e25ef7ab247 --- /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 00000000000..68e9d81c600 --- /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 00000000000..a2d8418cbf0 --- /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 00000000000..1f2c561c13d --- /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 dc2f459e034..bd378f411eb 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 f3d90f64bde..8ea758777cc 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