diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 746b3236cf3..6bf47ba4b98 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -982,7 +982,13 @@ namespace ts {
}
function getTargetOfGlobalModuleExportDeclaration(node: GlobalModuleExportDeclaration): Symbol {
- return node.parent.symbol;
+ const moduleSymbol = node.parent.symbol;
+ if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports["export="]) {
+ return moduleSymbol.exports["export="].exportSymbol;
+ }
+ else {
+ return moduleSymbol;
+ }
}
function getTargetOfExportSpecifier(node: ExportSpecifier): Symbol {
diff --git a/tests/baselines/reference/umd6.js b/tests/baselines/reference/umd6.js
new file mode 100644
index 00000000000..d4d84fd0384
--- /dev/null
+++ b/tests/baselines/reference/umd6.js
@@ -0,0 +1,18 @@
+//// [tests/cases/conformance/externalModules/umd6.ts] ////
+
+//// [foo.d.ts]
+
+declare namespace Thing {
+ export function fn(): number;
+}
+export = Thing;
+export as namespace Foo;
+
+//// [a.ts]
+///
+let y: number = Foo.fn();
+
+
+//// [a.js]
+///
+var y = exports.Foo.fn();
diff --git a/tests/baselines/reference/umd6.symbols b/tests/baselines/reference/umd6.symbols
new file mode 100644
index 00000000000..3b417e005d6
--- /dev/null
+++ b/tests/baselines/reference/umd6.symbols
@@ -0,0 +1,19 @@
+=== tests/cases/conformance/externalModules/a.ts ===
+///
+let y: number = Foo.fn();
+>y : Symbol(y, Decl(a.ts, 1, 3))
+>Foo : Symbol(Foo, Decl(foo.d.ts, 4, 15))
+
+=== tests/cases/conformance/externalModules/foo.d.ts ===
+
+declare namespace Thing {
+>Thing : Symbol(Thing, Decl(foo.d.ts, 0, 0))
+
+ export function fn(): number;
+>fn : Symbol(fn, Decl(foo.d.ts, 1, 25))
+}
+export = Thing;
+>Thing : Symbol(Thing, Decl(foo.d.ts, 0, 0))
+
+export as namespace Foo;
+
diff --git a/tests/baselines/reference/umd6.types b/tests/baselines/reference/umd6.types
new file mode 100644
index 00000000000..dc0f45846c2
--- /dev/null
+++ b/tests/baselines/reference/umd6.types
@@ -0,0 +1,23 @@
+=== tests/cases/conformance/externalModules/a.ts ===
+///
+let y: number = Foo.fn();
+>y : number
+>Foo.fn() : any
+>Foo.fn : any
+>Foo : any
+>fn : any
+
+=== tests/cases/conformance/externalModules/foo.d.ts ===
+
+declare namespace Thing {
+>Thing : typeof Thing
+
+ export function fn(): number;
+>fn : () => number
+}
+export = Thing;
+>Thing : typeof Thing
+
+export as namespace Foo;
+>Foo : any
+
diff --git a/tests/cases/conformance/externalModules/umd6.ts b/tests/cases/conformance/externalModules/umd6.ts
new file mode 100644
index 00000000000..2f9e49072cf
--- /dev/null
+++ b/tests/cases/conformance/externalModules/umd6.ts
@@ -0,0 +1,13 @@
+// @module: commonjs
+// @noImplicitReferences: true
+
+// @filename: foo.d.ts
+declare namespace Thing {
+ export function fn(): number;
+}
+export = Thing;
+export as namespace Foo;
+
+// @filename: a.ts
+///
+let y: number = Foo.fn();