diff --git a/scripts/configurePrerelease.ts b/scripts/configurePrerelease.ts
index da1984c13e..2377b5d471 100644
--- a/scripts/configurePrerelease.ts
+++ b/scripts/configurePrerelease.ts
@@ -56,13 +56,13 @@ function updateTsFile(tsFilePath: string, tsFileContents: string, majorMinor: st
const majorMinorRgx = /export const versionMajorMinor = "(\d+\.\d+)"/;
const majorMinorMatch = majorMinorRgx.exec(tsFileContents);
assert(majorMinorMatch !== null, `The file seems to no longer have a string matching '${majorMinorRgx}'.`);
- const parsedMajorMinor = majorMinorMatch[1];
+ const parsedMajorMinor = majorMinorMatch![1];
assert(parsedMajorMinor === majorMinor, `versionMajorMinor does not match. ${tsFilePath}: '${parsedMajorMinor}'; package.json: '${majorMinor}'`);
const versionRgx = /export const version = `\$\{versionMajorMinor\}\.(\d)(-dev)?`;/;
const patchMatch = versionRgx.exec(tsFileContents);
assert(patchMatch !== null, "The file seems to no longer have a string matching " + versionRgx.toString());
- const parsedPatch = patchMatch[1];
+ const parsedPatch = patchMatch![1];
if (parsedPatch !== patch) {
throw new Error(`patch does not match. ${tsFilePath}: '${parsedPatch}; package.json: '${patch}'`);
}
@@ -74,7 +74,7 @@ function parsePackageJsonVersion(versionString: string): { majorMinor: string, p
const versionRgx = /(\d+\.\d+)\.(\d+)($|\-)/;
const match = versionString.match(versionRgx);
assert(match !== null, "package.json 'version' should match " + versionRgx.toString());
- return { majorMinor: match[1], patch: match[2] };
+ return { majorMinor: match![1], patch: match![2] };
}
/** e.g. 0-dev.20170707 */
diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 769cde5dcc..237553141f 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -24153,6 +24153,16 @@ namespace ts {
}
}
+ /**
+ * The name cannot be used as 'Object' of user defined types with special target.
+ */
+ function checkClassNameCollisionWithObject(name: Identifier): void {
+ if (languageVersion === ScriptTarget.ES5 && name.escapedText === "Object"
+ && moduleKind !== ModuleKind.ES2015 && moduleKind !== ModuleKind.ESNext) {
+ error(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ModuleKind[moduleKind]); // https://github.com/Microsoft/TypeScript/issues/17494
+ }
+ }
+
/**
* Check each type parameter and check that type parameters have no duplicate type parameter declarations
*/
@@ -24279,6 +24289,9 @@ namespace ts {
checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
+ if (!(node.flags & NodeFlags.Ambient)) {
+ checkClassNameCollisionWithObject(node.name);
+ }
}
checkTypeParameters(getEffectiveTypeParameterDeclarations(node));
checkExportsOnMergedDeclarations(node);
diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json
index be96d3de07..f0bb5e5ed7 100644
--- a/src/compiler/diagnosticMessages.json
+++ b/src/compiler/diagnosticMessages.json
@@ -2357,6 +2357,11 @@
"category": "Error",
"code": 2724
},
+ "Class name cannot be 'Object' when targeting ES5 with module {0}.": {
+ "category": "Error",
+ "code": 2725
+ },
+
"Import declaration '{0}' is using private name '{1}'.": {
"category": "Error",
"code": 4000
diff --git a/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl
index 3607e3e848..e68b3b149e 100644
--- a/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl
+++ b/src/loc/lcl/chs/diagnosticMessages/diagnosticMessages.generated.json.lcl
@@ -1008,6 +1008,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -1125,6 +1134,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -2538,6 +2556,12 @@
+ -
+
+
+
+
+
-
@@ -6564,6 +6588,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -6603,6 +6636,24 @@
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
-
diff --git a/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl
index d64721cd90..4d01ea1789 100644
--- a/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl
+++ b/src/loc/lcl/csy/diagnosticMessages/diagnosticMessages.generated.json.lcl
@@ -1017,6 +1017,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -1134,6 +1143,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -2547,6 +2565,12 @@
+ -
+
+
+
+
+
-
@@ -6573,6 +6597,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -6612,6 +6645,24 @@
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
-
diff --git a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl
index ea95d1bda8..e076be1b08 100644
--- a/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl
+++ b/src/loc/lcl/deu/diagnosticMessages/diagnosticMessages.generated.json.lcl
@@ -1005,6 +1005,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -1122,6 +1131,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -2535,6 +2553,12 @@
+ -
+
+
+
+
+
-
@@ -6558,6 +6582,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -6597,6 +6630,24 @@
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
-
diff --git a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl
index 7a76969651..3688383b06 100644
--- a/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl
+++ b/src/loc/lcl/esn/diagnosticMessages/diagnosticMessages.generated.json.lcl
@@ -1019,10 +1019,13 @@
-
-
+
-
+
+
+
+
@@ -1143,6 +1146,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -2556,6 +2568,12 @@
+ -
+
+
+
+
+
-
@@ -6585,6 +6603,9 @@
-
+
+
+
@@ -6630,6 +6651,18 @@
-
+
+
+
+
+
+
+ -
+
+
+
+
+
diff --git a/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl b/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl
index d034fc6882..04e562b0fd 100644
--- a/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl
+++ b/src/loc/lcl/jpn/diagnosticMessages/diagnosticMessages.generated.json.lcl
@@ -1008,6 +1008,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -1125,6 +1134,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -2538,6 +2556,12 @@
+ -
+
+
+
+
+
-
@@ -6564,6 +6588,15 @@
+ -
+
+
+
+
+
+
+
+
-
@@ -6603,6 +6636,24 @@
+ -
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
-
diff --git a/src/server/typingsInstaller/nodeTypingsInstaller.ts b/src/server/typingsInstaller/nodeTypingsInstaller.ts
index 7132a93f3e..6de5d9e1e0 100644
--- a/src/server/typingsInstaller/nodeTypingsInstaller.ts
+++ b/src/server/typingsInstaller/nodeTypingsInstaller.ts
@@ -2,8 +2,7 @@
namespace ts.server.typingsInstaller {
const fs: {
- appendFileSync(file: string, content: string): void;
- existsSync(path: string): boolean;
+ appendFileSync(file: string, content: string): void
} = require("fs");
const path: {
@@ -33,12 +32,11 @@ namespace ts.server.typingsInstaller {
/** Used if `--npmLocation` is not passed. */
function getDefaultNPMLocation(processName: string) {
if (path.basename(processName).indexOf("node") === 0) {
- const npmPath = `"${path.join(path.dirname(process.argv[0]), "npm")}"`;
- if (fs.existsSync(npmPath)) {
- return npmPath;
- }
+ return `"${path.join(path.dirname(process.argv[0]), "npm")}"`;
+ }
+ else {
+ return "npm";
}
- return "npm";
}
interface TypesRegistryFile {
diff --git a/tests/baselines/reference/es6modulekindExportClassNameWithObject.js b/tests/baselines/reference/es6modulekindExportClassNameWithObject.js
new file mode 100644
index 0000000000..d5af2ffafa
--- /dev/null
+++ b/tests/baselines/reference/es6modulekindExportClassNameWithObject.js
@@ -0,0 +1,11 @@
+//// [es6modulekindExportClassNameWithObject.ts]
+export class Object {}
+
+
+//// [es6modulekindExportClassNameWithObject.js]
+var Object = /** @class */ (function () {
+ function Object() {
+ }
+ return Object;
+}());
+export { Object };
diff --git a/tests/baselines/reference/es6modulekindExportClassNameWithObject.symbols b/tests/baselines/reference/es6modulekindExportClassNameWithObject.symbols
new file mode 100644
index 0000000000..b05183ae93
--- /dev/null
+++ b/tests/baselines/reference/es6modulekindExportClassNameWithObject.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts ===
+export class Object {}
+>Object : Symbol(Object, Decl(es6modulekindExportClassNameWithObject.ts, 0, 0))
+
diff --git a/tests/baselines/reference/es6modulekindExportClassNameWithObject.types b/tests/baselines/reference/es6modulekindExportClassNameWithObject.types
new file mode 100644
index 0000000000..b0b9cd7f6a
--- /dev/null
+++ b/tests/baselines/reference/es6modulekindExportClassNameWithObject.types
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts ===
+export class Object {}
+>Object : Object
+
diff --git a/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.js b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.js
new file mode 100644
index 0000000000..e56b6ad8f1
--- /dev/null
+++ b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.js
@@ -0,0 +1,11 @@
+//// [exnextmodulekindExportClassNameWithObject.ts]
+export class Object {}
+
+
+//// [exnextmodulekindExportClassNameWithObject.js]
+var Object = /** @class */ (function () {
+ function Object() {
+ }
+ return Object;
+}());
+export { Object };
diff --git a/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.symbols b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.symbols
new file mode 100644
index 0000000000..2bc0455e16
--- /dev/null
+++ b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts ===
+export class Object {}
+>Object : Symbol(Object, Decl(exnextmodulekindExportClassNameWithObject.ts, 0, 0))
+
diff --git a/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.types b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.types
new file mode 100644
index 0000000000..1fbe924a4a
--- /dev/null
+++ b/tests/baselines/reference/exnextmodulekindExportClassNameWithObject.types
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts ===
+export class Object {}
+>Object : Object
+
diff --git a/tests/baselines/reference/exportAmbientClassNameWithObject.js b/tests/baselines/reference/exportAmbientClassNameWithObject.js
new file mode 100644
index 0000000000..fdad4c7818
--- /dev/null
+++ b/tests/baselines/reference/exportAmbientClassNameWithObject.js
@@ -0,0 +1,7 @@
+//// [exportAmbientClassNameWithObject.ts]
+export declare class Object {}
+
+
+//// [exportAmbientClassNameWithObject.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/tests/baselines/reference/exportAmbientClassNameWithObject.symbols b/tests/baselines/reference/exportAmbientClassNameWithObject.symbols
new file mode 100644
index 0000000000..6287c91780
--- /dev/null
+++ b/tests/baselines/reference/exportAmbientClassNameWithObject.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts ===
+export declare class Object {}
+>Object : Symbol(Object, Decl(exportAmbientClassNameWithObject.ts, 0, 0))
+
diff --git a/tests/baselines/reference/exportAmbientClassNameWithObject.types b/tests/baselines/reference/exportAmbientClassNameWithObject.types
new file mode 100644
index 0000000000..e85e4eb05d
--- /dev/null
+++ b/tests/baselines/reference/exportAmbientClassNameWithObject.types
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts ===
+export declare class Object {}
+>Object : Object
+
diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt b/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt
new file mode 100644
index 0000000000..32eb7a1e7d
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt
@@ -0,0 +1,8 @@
+tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts(1,14): error TS2725: Class name cannot be 'Object' when targeting ES5 with module AMD.
+
+
+==== tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts (1 errors) ====
+ export class Object {}
+ ~~~~~~
+!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module AMD.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.js b/tests/baselines/reference/exportClassNameWithObjectAMD.js
new file mode 100644
index 0000000000..e3403689cb
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectAMD.js
@@ -0,0 +1,15 @@
+//// [exportClassNameWithObjectAMD.ts]
+export class Object {}
+
+
+//// [exportClassNameWithObjectAMD.js]
+define(["require", "exports"], function (require, exports) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var Object = /** @class */ (function () {
+ function Object() {
+ }
+ return Object;
+ }());
+ exports.Object = Object;
+});
diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.symbols b/tests/baselines/reference/exportClassNameWithObjectAMD.symbols
new file mode 100644
index 0000000000..eadb0af0dd
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectAMD.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts ===
+export class Object {}
+>Object : Symbol(Object, Decl(exportClassNameWithObjectAMD.ts, 0, 0))
+
diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.types b/tests/baselines/reference/exportClassNameWithObjectAMD.types
new file mode 100644
index 0000000000..7caeadb6e0
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectAMD.types
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts ===
+export class Object {}
+>Object : Object
+
diff --git a/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt b/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt
new file mode 100644
index 0000000000..de5b8d59ca
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt
@@ -0,0 +1,8 @@
+tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts(1,14): error TS2725: Class name cannot be 'Object' when targeting ES5 with module CommonJS.
+
+
+==== tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts (1 errors) ====
+ export class Object {}
+ ~~~~~~
+!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module CommonJS.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/exportClassNameWithObjectCommonJS.js b/tests/baselines/reference/exportClassNameWithObjectCommonJS.js
new file mode 100644
index 0000000000..b9e2522b1b
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.js
@@ -0,0 +1,13 @@
+//// [exportClassNameWithObjectCommonJS.ts]
+export class Object {}
+
+
+//// [exportClassNameWithObjectCommonJS.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Object = /** @class */ (function () {
+ function Object() {
+ }
+ return Object;
+}());
+exports.Object = Object;
diff --git a/tests/baselines/reference/exportClassNameWithObjectCommonJS.symbols b/tests/baselines/reference/exportClassNameWithObjectCommonJS.symbols
new file mode 100644
index 0000000000..025fa479fd
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts ===
+export class Object {}
+>Object : Symbol(Object, Decl(exportClassNameWithObjectCommonJS.ts, 0, 0))
+
diff --git a/tests/baselines/reference/exportClassNameWithObjectCommonJS.types b/tests/baselines/reference/exportClassNameWithObjectCommonJS.types
new file mode 100644
index 0000000000..38ce8d61d9
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.types
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts ===
+export class Object {}
+>Object : Object
+
diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt b/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt
new file mode 100644
index 0000000000..4b43001cc2
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt
@@ -0,0 +1,8 @@
+tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts(1,14): error TS2725: Class name cannot be 'Object' when targeting ES5 with module System.
+
+
+==== tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts (1 errors) ====
+ export class Object {}
+ ~~~~~~
+!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module System.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.js b/tests/baselines/reference/exportClassNameWithObjectSystem.js
new file mode 100644
index 0000000000..361f4d807d
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectSystem.js
@@ -0,0 +1,21 @@
+//// [exportClassNameWithObjectSystem.ts]
+export class Object {}
+
+
+//// [exportClassNameWithObjectSystem.js]
+System.register([], function (exports_1, context_1) {
+ "use strict";
+ var Object;
+ var __moduleName = context_1 && context_1.id;
+ return {
+ setters: [],
+ execute: function () {
+ Object = /** @class */ (function () {
+ function Object() {
+ }
+ return Object;
+ }());
+ exports_1("Object", Object);
+ }
+ };
+});
diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.symbols b/tests/baselines/reference/exportClassNameWithObjectSystem.symbols
new file mode 100644
index 0000000000..5152c2aa63
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectSystem.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts ===
+export class Object {}
+>Object : Symbol(Object, Decl(exportClassNameWithObjectSystem.ts, 0, 0))
+
diff --git a/tests/baselines/reference/exportClassNameWithObjectSystem.types b/tests/baselines/reference/exportClassNameWithObjectSystem.types
new file mode 100644
index 0000000000..5b6507fd94
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectSystem.types
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts ===
+export class Object {}
+>Object : Object
+
diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt b/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt
new file mode 100644
index 0000000000..e292c473af
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt
@@ -0,0 +1,8 @@
+tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts(1,14): error TS2725: Class name cannot be 'Object' when targeting ES5 with module UMD.
+
+
+==== tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts (1 errors) ====
+ export class Object {}
+ ~~~~~~
+!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module UMD.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.js b/tests/baselines/reference/exportClassNameWithObjectUMD.js
new file mode 100644
index 0000000000..1447392c87
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectUMD.js
@@ -0,0 +1,23 @@
+//// [exportClassNameWithObjectUMD.ts]
+export class Object {}
+
+
+//// [exportClassNameWithObjectUMD.js]
+(function (factory) {
+ if (typeof module === "object" && typeof module.exports === "object") {
+ var v = factory(require, exports);
+ if (v !== undefined) module.exports = v;
+ }
+ else if (typeof define === "function" && define.amd) {
+ define(["require", "exports"], factory);
+ }
+})(function (require, exports) {
+ "use strict";
+ Object.defineProperty(exports, "__esModule", { value: true });
+ var Object = /** @class */ (function () {
+ function Object() {
+ }
+ return Object;
+ }());
+ exports.Object = Object;
+});
diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.symbols b/tests/baselines/reference/exportClassNameWithObjectUMD.symbols
new file mode 100644
index 0000000000..05d3eeb8b0
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectUMD.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts ===
+export class Object {}
+>Object : Symbol(Object, Decl(exportClassNameWithObjectUMD.ts, 0, 0))
+
diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.types b/tests/baselines/reference/exportClassNameWithObjectUMD.types
new file mode 100644
index 0000000000..42f0198cba
--- /dev/null
+++ b/tests/baselines/reference/exportClassNameWithObjectUMD.types
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts ===
+export class Object {}
+>Object : Object
+
diff --git a/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt b/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt
new file mode 100644
index 0000000000..da874bf2d4
--- /dev/null
+++ b/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt
@@ -0,0 +1,8 @@
+tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts(1,22): error TS2725: Class name cannot be 'Object' when targeting ES5 with module CommonJS.
+
+
+==== tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts (1 errors) ====
+ export default class Object {}
+ ~~~~~~
+!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module CommonJS.
+
\ No newline at end of file
diff --git a/tests/baselines/reference/exportDefaultClassNameWithObject.js b/tests/baselines/reference/exportDefaultClassNameWithObject.js
new file mode 100644
index 0000000000..f5a4ec74a6
--- /dev/null
+++ b/tests/baselines/reference/exportDefaultClassNameWithObject.js
@@ -0,0 +1,13 @@
+//// [exportDefaultClassNameWithObject.ts]
+export default class Object {}
+
+
+//// [exportDefaultClassNameWithObject.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Object = /** @class */ (function () {
+ function Object() {
+ }
+ return Object;
+}());
+exports.default = Object;
diff --git a/tests/baselines/reference/exportDefaultClassNameWithObject.symbols b/tests/baselines/reference/exportDefaultClassNameWithObject.symbols
new file mode 100644
index 0000000000..3192dcf73e
--- /dev/null
+++ b/tests/baselines/reference/exportDefaultClassNameWithObject.symbols
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts ===
+export default class Object {}
+>Object : Symbol(Object, Decl(exportDefaultClassNameWithObject.ts, 0, 0))
+
diff --git a/tests/baselines/reference/exportDefaultClassNameWithObject.types b/tests/baselines/reference/exportDefaultClassNameWithObject.types
new file mode 100644
index 0000000000..547164703d
--- /dev/null
+++ b/tests/baselines/reference/exportDefaultClassNameWithObject.types
@@ -0,0 +1,4 @@
+=== tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts ===
+export default class Object {}
+>Object : Object
+
diff --git a/tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts b/tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts
new file mode 100644
index 0000000000..40de8852ff
--- /dev/null
+++ b/tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts
@@ -0,0 +1,3 @@
+// @target: ES5
+// @module: es2015
+export class Object {}
diff --git a/tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts b/tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts
new file mode 100644
index 0000000000..440bfe080d
--- /dev/null
+++ b/tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts
@@ -0,0 +1,3 @@
+// @target: ES5
+// @module: esnext
+export class Object {}
diff --git a/tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts b/tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts
new file mode 100644
index 0000000000..3262ecdd3a
--- /dev/null
+++ b/tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts
@@ -0,0 +1,2 @@
+// @target: ES5
+export declare class Object {}
diff --git a/tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts b/tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts
new file mode 100644
index 0000000000..529924b4a4
--- /dev/null
+++ b/tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts
@@ -0,0 +1,3 @@
+// @target: ES5
+// @module: amd
+export class Object {}
diff --git a/tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts b/tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts
new file mode 100644
index 0000000000..676e275dfb
--- /dev/null
+++ b/tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts
@@ -0,0 +1,3 @@
+// @target: ES5
+// @module: commonjs
+export class Object {}
diff --git a/tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts b/tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts
new file mode 100644
index 0000000000..6d23d7e1e3
--- /dev/null
+++ b/tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts
@@ -0,0 +1,3 @@
+// @target: ES5
+// @module: system
+export class Object {}
diff --git a/tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts b/tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts
new file mode 100644
index 0000000000..d2cb221a06
--- /dev/null
+++ b/tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts
@@ -0,0 +1,3 @@
+// @target: ES5
+// @module: umd
+export class Object {}
diff --git a/tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts b/tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts
new file mode 100644
index 0000000000..75a5a33ac0
--- /dev/null
+++ b/tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts
@@ -0,0 +1,2 @@
+// @target: ES5
+export default class Object {}