diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index caab75c99fa8a..47766dd693147 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -46005,7 +46005,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { languageVersion >= ScriptTarget.ES5 && name.escapedText === "Object" && host.getEmitModuleFormatOfFile(getSourceFileOfNode(name)) < ModuleKind.ES2015 ) { - error(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ModuleKind[moduleKind]); // https://github.com/Microsoft/TypeScript/issues/17494 + // https://github.com/Microsoft/TypeScript/issues/17494 + error( + name, + Diagnostics.Class_name_cannot_be_Object_when_targeting_0_with_module_1, + ScriptTarget[languageVersion], + ModuleKind[moduleKind], + ); } } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index be2fe3957b20a..d531bea70480f 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3411,7 +3411,7 @@ "category": "Error", "code": 2724 }, - "Class name cannot be 'Object' when targeting ES5 with module {0}.": { + "Class name cannot be 'Object' when targeting {0} with module {1}.": { "category": "Error", "code": 2725 }, diff --git a/src/compiler/types.ts b/src/compiler/types.ts index f6ca75a68e17d..8c46d9242ad9a 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -7598,7 +7598,7 @@ export const enum ScriptKind { // June of each year. This includes changes to `LanguageFeatureMinimumTarget`, `ScriptTarget`, // `ScriptTargetFeatures` transformers/esnext.ts, compiler/commandLineParser.ts, // compiler/utilitiesPublic.ts, and the contents of each lib/esnext.*.d.ts file. -export const enum ScriptTarget { +export enum ScriptTarget { /** @deprecated */ ES3 = 0, ES5 = 1, diff --git a/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt b/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt index 5455c109354a4..dbfc87daf7236 100644 --- a/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt +++ b/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=node16).errors.txt @@ -1,6 +1,6 @@ subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. +subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES2022 with module Node16. subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. @@ -14,7 +14,7 @@ subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is res !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. class Object {} ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. +!!! error TS2725: Class name cannot be 'Object' when targeting ES2022 with module Node16. export const __esModule = false; ~~~~~~~~~~ !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=node18).errors.txt b/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=node18).errors.txt index e54f9b0f94ca4..07f0cbb1f6f1a 100644 --- a/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=node18).errors.txt +++ b/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=node18).errors.txt @@ -1,6 +1,6 @@ subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node18. +subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES2022 with module Node18. subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. @@ -14,7 +14,7 @@ subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is res !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. class Object {} ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node18. +!!! error TS2725: Class name cannot be 'Object' when targeting ES2022 with module Node18. export const __esModule = false; ~~~~~~~~~~ !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt b/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt index 609137dcd8c30..006c4021a7d57 100644 --- a/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt +++ b/tests/baselines/reference/nodeModulesAllowJsGeneratedNameCollisions(module=nodenext).errors.txt @@ -1,6 +1,6 @@ subfolder/index.js(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. subfolder/index.js(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. +subfolder/index.js(4,7): error TS2725: Class name cannot be 'Object' when targeting Latest with module NodeNext. subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. @@ -14,7 +14,7 @@ subfolder/index.js(5,14): error TS1216: Identifier expected. '__esModule' is res !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. class Object {} ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. +!!! error TS2725: Class name cannot be 'Object' when targeting Latest with module NodeNext. export const __esModule = false; ~~~~~~~~~~ !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=node16).errors.txt b/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=node16).errors.txt index 534e94fccdbc7..13b24492b1d7b 100644 --- a/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=node16).errors.txt +++ b/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=node16).errors.txt @@ -1,6 +1,6 @@ subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. +subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES2022 with module Node16. subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. @@ -14,7 +14,7 @@ subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is res !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. class Object {} ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node16. +!!! error TS2725: Class name cannot be 'Object' when targeting ES2022 with module Node16. export const __esModule = false; ~~~~~~~~~~ !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=node18).errors.txt b/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=node18).errors.txt index fe89fc2f3863b..a75c9d004e791 100644 --- a/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=node18).errors.txt +++ b/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=node18).errors.txt @@ -1,6 +1,6 @@ subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node18. +subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES2022 with module Node18. subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. @@ -14,7 +14,7 @@ subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is res !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. class Object {} ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module Node18. +!!! error TS2725: Class name cannot be 'Object' when targeting ES2022 with module Node18. export const __esModule = false; ~~~~~~~~~~ !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt b/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt index 1a1ba80e6a10c..ef0fd7c0b8660 100644 --- a/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt +++ b/tests/baselines/reference/nodeModulesGeneratedNameCollisions(module=nodenext).errors.txt @@ -1,6 +1,6 @@ subfolder/index.ts(2,10): error TS2441: Duplicate identifier 'require'. Compiler reserves name 'require' in top level scope of a module. subfolder/index.ts(3,7): error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. -subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. +subfolder/index.ts(4,7): error TS2725: Class name cannot be 'Object' when targeting Latest with module NodeNext. subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. @@ -14,7 +14,7 @@ subfolder/index.ts(5,14): error TS1216: Identifier expected. '__esModule' is res !!! error TS2441: Duplicate identifier 'exports'. Compiler reserves name 'exports' in top level scope of a module. class Object {} ~~~~~~ -!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module NodeNext. +!!! error TS2725: Class name cannot be 'Object' when targeting Latest with module NodeNext. export const __esModule = false; ~~~~~~~~~~ !!! error TS1216: Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules. diff --git a/tests/cases/fourslash/issue61270.ts b/tests/cases/fourslash/issue61270.ts new file mode 100644 index 0000000000000..fccbfb4afc33c --- /dev/null +++ b/tests/cases/fourslash/issue61270.ts @@ -0,0 +1,13 @@ +/// <reference path="fourslash.ts" /> + +// @target: es2024 +// @module: commonjs + +// @filename: test.ts +//// namespace NS { class Object {} } + +verify.getSemanticDiagnostics([{ + code: 2725, + message: "Class name cannot be 'Object' when targeting ES2024 with module CommonJS.", + range: { pos: 21, end: 27, fileName: "test.ts" } +}]);