diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 02d81f5ceb..2659263215 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1109,7 +1109,7 @@ module ts { // Check if symbol is any of the alias return forEachValue(symbols, symbolFromSymbolTable => { - if (symbolFromSymbolTable.flags & SymbolFlags.Alias) { + if (symbolFromSymbolTable.flags & SymbolFlags.Alias && symbolFromSymbolTable.name !== "export=") { if (!useOnlyExternalAliasing || // We can use any type of alias to get the name // Is this external alias, then use it to name ts.forEach(symbolFromSymbolTable.declarations, isExternalModuleImportEqualsDeclaration)) { @@ -1950,6 +1950,10 @@ module ts { case SyntaxKind.SourceFile: return true; + // Export assignements do not create name bindings outside the module + case SyntaxKind.ExportAssignment: + return false; + default: Debug.fail("isDeclarationVisible unknown: SyntaxKind: " + node.kind); } diff --git a/tests/baselines/reference/declFileImportModuleWithExportAssignment.types b/tests/baselines/reference/declFileImportModuleWithExportAssignment.types index a2ae5c0768..15201baa48 100644 --- a/tests/baselines/reference/declFileImportModuleWithExportAssignment.types +++ b/tests/baselines/reference/declFileImportModuleWithExportAssignment.types @@ -42,23 +42,23 @@ module m2 { } var m2: { ->m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; } +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } (): m2.connectExport; >m2 : unknown ->connectExport : export=.connectExport +>connectExport : m2.connectExport test1: m2.connectModule; ->test1 : export=.connectModule +>test1 : m2.connectModule >m2 : unknown ->connectModule : export=.connectModule +>connectModule : m2.connectModule test2(): m2.connectModule; ->test2 : () => export=.connectModule +>test2 : () => m2.connectModule >m2 : unknown ->connectModule : export=.connectModule +>connectModule : m2.connectModule }; export = m2; ->m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; } +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } diff --git a/tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types b/tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types index e861059af7..70718471d5 100644 --- a/tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types +++ b/tests/baselines/reference/declareExternalModuleWithExportAssignedFundule.types @@ -7,7 +7,7 @@ declare module "express" { function express(): express.ExpressServer; >express : typeof express >express : unknown ->ExpressServer : export=.ExpressServer +>ExpressServer : express.ExpressServer module express { >express : typeof express diff --git a/tests/baselines/reference/declareFileExportAssignment.types b/tests/baselines/reference/declareFileExportAssignment.types index 80cfbf8238..f30586b07e 100644 --- a/tests/baselines/reference/declareFileExportAssignment.types +++ b/tests/baselines/reference/declareFileExportAssignment.types @@ -27,24 +27,24 @@ module m2 { } var m2: { ->m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; } +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } (): m2.connectExport; >m2 : unknown ->connectExport : export=.connectExport +>connectExport : m2.connectExport test1: m2.connectModule; ->test1 : export=.connectModule +>test1 : m2.connectModule >m2 : unknown ->connectModule : export=.connectModule +>connectModule : m2.connectModule test2(): m2.connectModule; ->test2 : () => export=.connectModule +>test2 : () => m2.connectModule >m2 : unknown ->connectModule : export=.connectModule +>connectModule : m2.connectModule }; export = m2; ->m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; } +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } diff --git a/tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types b/tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types index 376a9d7ba6..675dc38c86 100644 --- a/tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types +++ b/tests/baselines/reference/declareFileExportAssignmentWithVarFromVariableStatement.types @@ -28,24 +28,24 @@ module m2 { var x = 10, m2: { >x : number ->m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; } +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } (): m2.connectExport; >m2 : unknown ->connectExport : export=.connectExport +>connectExport : m2.connectExport test1: m2.connectModule; ->test1 : export=.connectModule +>test1 : m2.connectModule >m2 : unknown ->connectModule : export=.connectModule +>connectModule : m2.connectModule test2(): m2.connectModule; ->test2 : () => export=.connectModule +>test2 : () => m2.connectModule >m2 : unknown ->connectModule : export=.connectModule +>connectModule : m2.connectModule }; export = m2; ->m2 : { (): export=.connectExport; test1: export=.connectModule; test2(): export=.connectModule; } +>m2 : { (): m2.connectExport; test1: m2.connectModule; test2(): m2.connectModule; } diff --git a/tests/baselines/reference/es5ExportEqualsDts.js b/tests/baselines/reference/es5ExportEqualsDts.js new file mode 100644 index 0000000000..922d012be0 --- /dev/null +++ b/tests/baselines/reference/es5ExportEqualsDts.js @@ -0,0 +1,37 @@ +//// [es5ExportEqualsDts.ts] + +class A { + foo() { + var aVal: A.B; + return aVal; + } +} + +module A { + export interface B { } +} + +export = A + +//// [es5ExportEqualsDts.js] +var A = (function () { + function A() { + } + A.prototype.foo = function () { + var aVal; + return aVal; + }; + return A; +})(); +module.exports = A; + + +//// [es5ExportEqualsDts.d.ts] +declare class A { + foo(): A.B; +} +declare module A { + interface B { + } +} +export = A; diff --git a/tests/baselines/reference/es5ExportEqualsDts.types b/tests/baselines/reference/es5ExportEqualsDts.types new file mode 100644 index 0000000000..58b35a0d7c --- /dev/null +++ b/tests/baselines/reference/es5ExportEqualsDts.types @@ -0,0 +1,28 @@ +=== tests/cases/compiler/es5ExportEqualsDts.ts === + +class A { +>A : A + + foo() { +>foo : () => A.B + + var aVal: A.B; +>aVal : A.B +>A : unknown +>B : A.B + + return aVal; +>aVal : A.B + } +} + +module A { +>A : typeof A + + export interface B { } +>B : B +} + +export = A +>A : A + diff --git a/tests/baselines/reference/exportAssignClassAndModule.types b/tests/baselines/reference/exportAssignClassAndModule.types index 05a5cbf07a..dc4a19f345 100644 --- a/tests/baselines/reference/exportAssignClassAndModule.types +++ b/tests/baselines/reference/exportAssignClassAndModule.types @@ -22,9 +22,9 @@ class Foo { >Foo : Foo x: Foo.Bar; ->x : export=.Bar +>x : Foo.Bar >Foo : unknown ->Bar : export=.Bar +>Bar : Foo.Bar } module Foo { >Foo : typeof Foo diff --git a/tests/baselines/reference/exportEqualNamespaces.types b/tests/baselines/reference/exportEqualNamespaces.types index b94770837a..0f3091c1b8 100644 --- a/tests/baselines/reference/exportEqualNamespaces.types +++ b/tests/baselines/reference/exportEqualNamespaces.types @@ -12,7 +12,7 @@ interface server { (): server.Server; >server : unknown ->Server : export=.Server +>Server : server.Server startTime: Date; >startTime : Date diff --git a/tests/baselines/reference/privacyCheckExportAssignmentOnExportedGenericInterface1.types b/tests/baselines/reference/privacyCheckExportAssignmentOnExportedGenericInterface1.types index f0c8c25be2..936f04731f 100644 --- a/tests/baselines/reference/privacyCheckExportAssignmentOnExportedGenericInterface1.types +++ b/tests/baselines/reference/privacyCheckExportAssignmentOnExportedGenericInterface1.types @@ -12,9 +12,9 @@ interface Foo { >T : T } var Foo: new () => Foo.A>; ->Foo : new () => export=.A> +>Foo : new () => Foo.A> >Foo : unknown ->A : export=.A +>A : Foo.A >Foo : Foo export = Foo; diff --git a/tests/cases/compiler/es5ExportEqualsDts.ts b/tests/cases/compiler/es5ExportEqualsDts.ts new file mode 100644 index 0000000000..1253c9ac22 --- /dev/null +++ b/tests/cases/compiler/es5ExportEqualsDts.ts @@ -0,0 +1,16 @@ +// @target: es5 +// @module: commonjs +// @declaration: true + +class A { + foo() { + var aVal: A.B; + return aVal; + } +} + +module A { + export interface B { } +} + +export = A \ No newline at end of file