From cb2be44d0236fe7a75a4580e83efa8075c5a5150 Mon Sep 17 00:00:00 2001 From: kingwl <805037171@163.com> Date: Tue, 17 Oct 2017 10:48:21 +0800 Subject: [PATCH 1/4] fix export class declare with name object targeting es5 (#17494) --- src/compiler/checker.ts | 12 ++++++++++ src/compiler/diagnosticMessages.json | 5 ++++ .../es6modulekindExportClassNameWithObject.js | 11 +++++++++ ...odulekindExportClassNameWithObject.symbols | 4 ++++ ...6modulekindExportClassNameWithObject.types | 4 ++++ ...nextmodulekindExportClassNameWithObject.js | 11 +++++++++ ...odulekindExportClassNameWithObject.symbols | 4 ++++ ...tmodulekindExportClassNameWithObject.types | 4 ++++ .../exportAmbientClassNameWithObject.js | 7 ++++++ .../exportAmbientClassNameWithObject.symbols | 4 ++++ .../exportAmbientClassNameWithObject.types | 4 ++++ .../exportClassNameWithObjectAMD.errors.txt | 8 +++++++ .../reference/exportClassNameWithObjectAMD.js | 15 ++++++++++++ .../exportClassNameWithObjectAMD.symbols | 4 ++++ .../exportClassNameWithObjectAMD.types | 4 ++++ ...portClassNameWithObjectCommonJS.errors.txt | 8 +++++++ .../exportClassNameWithObjectCommonJS.js | 13 +++++++++++ .../exportClassNameWithObjectCommonJS.symbols | 4 ++++ .../exportClassNameWithObjectCommonJS.types | 4 ++++ ...exportClassNameWithObjectSystem.errors.txt | 8 +++++++ .../exportClassNameWithObjectSystem.js | 21 +++++++++++++++++ .../exportClassNameWithObjectSystem.symbols | 4 ++++ .../exportClassNameWithObjectSystem.types | 4 ++++ .../exportClassNameWithObjectUMD.errors.txt | 8 +++++++ .../reference/exportClassNameWithObjectUMD.js | 23 +++++++++++++++++++ .../exportClassNameWithObjectUMD.symbols | 4 ++++ .../exportClassNameWithObjectUMD.types | 4 ++++ ...xportDefaultClassNameWithObject.errors.txt | 8 +++++++ .../exportDefaultClassNameWithObject.js | 13 +++++++++++ .../exportDefaultClassNameWithObject.symbols | 4 ++++ .../exportDefaultClassNameWithObject.types | 4 ++++ .../es6modulekindExportClassNameWithObject.ts | 3 +++ ...nextmodulekindExportClassNameWithObject.ts | 3 +++ .../exportAmbientClassNameWithObject.ts | 2 ++ .../exportClassNameWithObjectAMD.ts | 3 +++ .../exportClassNameWithObjectCommonJS.ts | 3 +++ .../exportClassNameWithObjectSystem.ts | 3 +++ .../exportClassNameWithObjectUMD.ts | 3 +++ .../exportDefaultClassNameWithObject.ts | 2 ++ 39 files changed, 257 insertions(+) create mode 100644 tests/baselines/reference/es6modulekindExportClassNameWithObject.js create mode 100644 tests/baselines/reference/es6modulekindExportClassNameWithObject.symbols create mode 100644 tests/baselines/reference/es6modulekindExportClassNameWithObject.types create mode 100644 tests/baselines/reference/exnextmodulekindExportClassNameWithObject.js create mode 100644 tests/baselines/reference/exnextmodulekindExportClassNameWithObject.symbols create mode 100644 tests/baselines/reference/exnextmodulekindExportClassNameWithObject.types create mode 100644 tests/baselines/reference/exportAmbientClassNameWithObject.js create mode 100644 tests/baselines/reference/exportAmbientClassNameWithObject.symbols create mode 100644 tests/baselines/reference/exportAmbientClassNameWithObject.types create mode 100644 tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt create mode 100644 tests/baselines/reference/exportClassNameWithObjectAMD.js create mode 100644 tests/baselines/reference/exportClassNameWithObjectAMD.symbols create mode 100644 tests/baselines/reference/exportClassNameWithObjectAMD.types create mode 100644 tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt create mode 100644 tests/baselines/reference/exportClassNameWithObjectCommonJS.js create mode 100644 tests/baselines/reference/exportClassNameWithObjectCommonJS.symbols create mode 100644 tests/baselines/reference/exportClassNameWithObjectCommonJS.types create mode 100644 tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt create mode 100644 tests/baselines/reference/exportClassNameWithObjectSystem.js create mode 100644 tests/baselines/reference/exportClassNameWithObjectSystem.symbols create mode 100644 tests/baselines/reference/exportClassNameWithObjectSystem.types create mode 100644 tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt create mode 100644 tests/baselines/reference/exportClassNameWithObjectUMD.js create mode 100644 tests/baselines/reference/exportClassNameWithObjectUMD.symbols create mode 100644 tests/baselines/reference/exportClassNameWithObjectUMD.types create mode 100644 tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt create mode 100644 tests/baselines/reference/exportDefaultClassNameWithObject.js create mode 100644 tests/baselines/reference/exportDefaultClassNameWithObject.symbols create mode 100644 tests/baselines/reference/exportDefaultClassNameWithObject.types create mode 100644 tests/cases/conformance/externalModules/es6/es6modulekindExportClassNameWithObject.ts create mode 100644 tests/cases/conformance/externalModules/esnext/exnextmodulekindExportClassNameWithObject.ts create mode 100644 tests/cases/conformance/externalModules/exportAmbientClassNameWithObject.ts create mode 100644 tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts create mode 100644 tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts create mode 100644 tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts create mode 100644 tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts create mode 100644 tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index fb1f62ddaf5..b138ce9ea70 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,8 +24289,10 @@ namespace ts { checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); + checkClassNameCollisionWithObject(node.name); } checkTypeParameters(getEffectiveTypeParameterDeclarations(node)); + checkTypeParameters(node.typeParameters); checkExportsOnMergedDeclarations(node); const symbol = getSymbolOfNode(node); const type = getDeclaredTypeOfSymbol(symbol); diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index be96d3de07d..f0bb5e5ed7d 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/tests/baselines/reference/es6modulekindExportClassNameWithObject.js b/tests/baselines/reference/es6modulekindExportClassNameWithObject.js new file mode 100644 index 00000000000..d5af2ffafa0 --- /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 00000000000..b05183ae935 --- /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 00000000000..b0b9cd7f6a6 --- /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 00000000000..e56b6ad8f16 --- /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 00000000000..2bc0455e162 --- /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 00000000000..1fbe924a4a0 --- /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 00000000000..fdad4c7818c --- /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 00000000000..6287c91780a --- /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 00000000000..e85e4eb05db --- /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 00000000000..781a010abb4 --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module AMD. + + +==== tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts (1 errors) ==== + export class Object {} + ~~~~~~ +!!! error TS2717: 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 00000000000..e3403689cbb --- /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 00000000000..eadb0af0ddc --- /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 00000000000..7caeadb6e03 --- /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 00000000000..84ffb7f0f8a --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. + + +==== tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts (1 errors) ==== + export class Object {} + ~~~~~~ +!!! error TS2717: 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 00000000000..b9e2522b1b2 --- /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 00000000000..025fa479fd6 --- /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 00000000000..38ce8d61d95 --- /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 00000000000..67a932524bb --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module System. + + +==== tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts (1 errors) ==== + export class Object {} + ~~~~~~ +!!! error TS2717: 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 00000000000..6bb9dadaac6 --- /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 __moduleName = context_1 && context_1.id; + var Object; + 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 00000000000..5152c2aa637 --- /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 00000000000..5b6507fd940 --- /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 00000000000..73cd319230b --- /dev/null +++ b/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module UMD. + + +==== tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts (1 errors) ==== + export class Object {} + ~~~~~~ +!!! error TS2717: 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 00000000000..1447392c875 --- /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 00000000000..05d3eeb8b02 --- /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 00000000000..42f0198cbaf --- /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 00000000000..7be181d956b --- /dev/null +++ b/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt @@ -0,0 +1,8 @@ +tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts(1,22): error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. + + +==== tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts (1 errors) ==== + export default class Object {} + ~~~~~~ +!!! error TS2717: 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 00000000000..f5a4ec74a66 --- /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 00000000000..3192dcf73ef --- /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 00000000000..547164703d0 --- /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 00000000000..40de8852ff1 --- /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 00000000000..440bfe080d4 --- /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 00000000000..3262ecdd3a5 --- /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 00000000000..529924b4a4f --- /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 00000000000..676e275dfbd --- /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 00000000000..6d23d7e1e3b --- /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 00000000000..d2cb221a069 --- /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 00000000000..75a5a33ac06 --- /dev/null +++ b/tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts @@ -0,0 +1,2 @@ +// @target: ES5 +export default class Object {} From d5239cdf6ae7d7b9d284bcb2427bac71527f5d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Thu, 24 May 2018 18:20:54 +0800 Subject: [PATCH 2/4] fix ambient context --- src/compiler/checker.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b138ce9ea70..abcfb35ff88 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24289,7 +24289,9 @@ namespace ts { checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0); checkCollisionWithRequireExportsInGeneratedCode(node, node.name); checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name); - checkClassNameCollisionWithObject(node.name); + if (!(node.flags & NodeFlags.Ambient)) { + checkClassNameCollisionWithObject(node.name); + } } checkTypeParameters(getEffectiveTypeParameterDeclarations(node)); checkTypeParameters(node.typeParameters); From 7f127de89e65eee31ddd4f69b2c1844f9f587ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Fri, 25 May 2018 09:36:16 +0800 Subject: [PATCH 3/4] remove invalid check --- src/compiler/checker.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index abcfb35ff88..12f85eb18b6 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24294,7 +24294,6 @@ namespace ts { } } checkTypeParameters(getEffectiveTypeParameterDeclarations(node)); - checkTypeParameters(node.typeParameters); checkExportsOnMergedDeclarations(node); const symbol = getSymbolOfNode(node); const type = getDeclaredTypeOfSymbol(symbol); From 5df00d29c78e607b7ca8cb8f08506c4233f8fa8b Mon Sep 17 00:00:00 2001 From: kingwl Date: Thu, 24 May 2018 22:47:06 +0800 Subject: [PATCH 4/4] accept baseline --- .../reference/exportClassNameWithObjectAMD.errors.txt | 4 ++-- .../reference/exportClassNameWithObjectCommonJS.errors.txt | 4 ++-- .../reference/exportClassNameWithObjectSystem.errors.txt | 4 ++-- tests/baselines/reference/exportClassNameWithObjectSystem.js | 2 +- .../reference/exportClassNameWithObjectUMD.errors.txt | 4 ++-- .../reference/exportDefaultClassNameWithObject.errors.txt | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt b/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt index 781a010abb4..32eb7a1e7da 100644 --- a/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt +++ b/tests/baselines/reference/exportClassNameWithObjectAMD.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportClassNameWithObjectAMD.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module AMD. +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 TS2717: Class name cannot be 'Object' when targeting ES5 with module AMD. +!!! 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/exportClassNameWithObjectCommonJS.errors.txt b/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt index 84ffb7f0f8a..de5b8d59cae 100644 --- a/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt +++ b/tests/baselines/reference/exportClassNameWithObjectCommonJS.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportClassNameWithObjectCommonJS.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. +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 TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. +!!! 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/exportClassNameWithObjectSystem.errors.txt b/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt index 67a932524bb..4b43001cc23 100644 --- a/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportClassNameWithObjectSystem.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module System. +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 TS2717: Class name cannot be 'Object' when targeting ES5 with module System. +!!! 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 index 6bb9dadaac6..54bbd952407 100644 --- a/tests/baselines/reference/exportClassNameWithObjectSystem.js +++ b/tests/baselines/reference/exportClassNameWithObjectSystem.js @@ -4,9 +4,9 @@ export class Object {} //// [exportClassNameWithObjectSystem.js] System.register([], function (exports_1, context_1) { + var Object; "use strict"; var __moduleName = context_1 && context_1.id; - var Object; return { setters: [], execute: function () { diff --git a/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt b/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt index 73cd319230b..e292c473af4 100644 --- a/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt +++ b/tests/baselines/reference/exportClassNameWithObjectUMD.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportClassNameWithObjectUMD.ts(1,14): error TS2717: Class name cannot be 'Object' when targeting ES5 with module UMD. +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 TS2717: Class name cannot be 'Object' when targeting ES5 with module UMD. +!!! 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/exportDefaultClassNameWithObject.errors.txt b/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt index 7be181d956b..da874bf2d4c 100644 --- a/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt +++ b/tests/baselines/reference/exportDefaultClassNameWithObject.errors.txt @@ -1,8 +1,8 @@ -tests/cases/conformance/externalModules/exportDefaultClassNameWithObject.ts(1,22): error TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. +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 TS2717: Class name cannot be 'Object' when targeting ES5 with module CommonJS. +!!! error TS2725: Class name cannot be 'Object' when targeting ES5 with module CommonJS. \ No newline at end of file