diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 582fc16981a..4e47bb4ffdd 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1125,7 +1125,7 @@ namespace ts { return getExternalModuleMember(node.parent.parent.parent, node); } - function getTargetOfGlobalModuleExportDeclaration(node: NamespaceExportDeclaration): Symbol { + function getTargetOfNamespaceExportDeclaration(node: NamespaceExportDeclaration): Symbol { return resolveExternalModuleSymbol(node.parent.symbol); } @@ -1154,7 +1154,7 @@ namespace ts { case SyntaxKind.ExportAssignment: return getTargetOfExportAssignment(node); case SyntaxKind.NamespaceExportDeclaration: - return getTargetOfGlobalModuleExportDeclaration(node); + return getTargetOfNamespaceExportDeclaration(node); } } @@ -17432,7 +17432,10 @@ namespace ts { const parentSymbol = getParentOfSymbol(symbol); if (parentSymbol) { if (parentSymbol.flags & SymbolFlags.ValueModule && parentSymbol.valueDeclaration.kind === SyntaxKind.SourceFile) { - return parentSymbol.valueDeclaration; + // If `node` accesses an export and that export isn't in the same file, then symbol is a namespace export, so return undefined. + if (parentSymbol.valueDeclaration === getSourceFileOfNode(node)) { + return parentSymbol.valueDeclaration; + } } for (let n = node.parent; n; n = n.parent) { if ((n.kind === SyntaxKind.ModuleDeclaration || n.kind === SyntaxKind.EnumDeclaration) && getSymbolOfNode(n) === parentSymbol) { diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 101778e7322..f33bad264fd 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -753,6 +753,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge return generateNameForExportDefault(); case SyntaxKind.ClassExpression: return generateNameForClassExpression(); + default: + Debug.fail(); } } diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 38aa704fb21..c245f9ba462 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -4699,7 +4699,7 @@ namespace ts { case SyntaxKind.EqualsToken: return parseExportAssignment(fullStart, decorators, modifiers); case SyntaxKind.AsKeyword: - return parseGlobalModuleExportDeclaration(fullStart, decorators, modifiers); + return parseNamespaceExportDeclaration(fullStart, decorators, modifiers); default: return parseExportDeclaration(fullStart, decorators, modifiers); } @@ -5378,7 +5378,7 @@ namespace ts { return nextToken() === SyntaxKind.SlashToken; } - function parseGlobalModuleExportDeclaration(fullStart: number, decorators: NodeArray, modifiers: ModifiersArray): NamespaceExportDeclaration { + function parseNamespaceExportDeclaration(fullStart: number, decorators: NodeArray, modifiers: ModifiersArray): NamespaceExportDeclaration { const exportDeclaration = createNode(SyntaxKind.NamespaceExportDeclaration, fullStart); exportDeclaration.decorators = decorators; exportDeclaration.modifiers = modifiers; diff --git a/tests/baselines/reference/umd-augmentation-2.js b/tests/baselines/reference/umd-augmentation-2.js index a4a98690b52..2656ae9d0e8 100644 --- a/tests/baselines/reference/umd-augmentation-2.js +++ b/tests/baselines/reference/umd-augmentation-2.js @@ -42,8 +42,8 @@ var t = p.x; //// [a.js] /// /// -var v = new exports.Math2d.Vector(3, 2); -var magnitude = exports.Math2d.getLength(v); +var v = new Math2d.Vector(3, 2); +var magnitude = Math2d.getLength(v); var p = v.translate(5, 5); p = v.reverse(); var t = p.x; diff --git a/tests/baselines/reference/umd-augmentation-4.js b/tests/baselines/reference/umd-augmentation-4.js index da0f2ec1777..69c27cfe484 100644 --- a/tests/baselines/reference/umd-augmentation-4.js +++ b/tests/baselines/reference/umd-augmentation-4.js @@ -48,8 +48,8 @@ var t = p.x; //// [a.js] /// /// -var v = new exports.Math2d.Vector(3, 2); -var magnitude = exports.Math2d.getLength(v); +var v = new Math2d.Vector(3, 2); +var magnitude = Math2d.getLength(v); var p = v.translate(5, 5); p = v.reverse(); var t = p.x; diff --git a/tests/baselines/reference/umd1.js b/tests/baselines/reference/umd1.js index 9b059da4887..c343e0539cc 100644 --- a/tests/baselines/reference/umd1.js +++ b/tests/baselines/reference/umd1.js @@ -16,6 +16,6 @@ let y: number = x.n; //// [a.js] /// -exports.Foo.fn(); +Foo.fn(); var x; var y = x.n; diff --git a/tests/baselines/reference/umd5.js b/tests/baselines/reference/umd5.js index f8e2321a0f1..d054daf93fd 100644 --- a/tests/baselines/reference/umd5.js +++ b/tests/baselines/reference/umd5.js @@ -23,4 +23,4 @@ Bar.fn(); var x; var y = x.n; // should error -var z = exports.Foo; +var z = Foo; diff --git a/tests/baselines/reference/umd6.js b/tests/baselines/reference/umd6.js index d4d84fd0384..d2ae5a4a6ca 100644 --- a/tests/baselines/reference/umd6.js +++ b/tests/baselines/reference/umd6.js @@ -15,4 +15,4 @@ let y: number = Foo.fn(); //// [a.js] /// -var y = exports.Foo.fn(); +var y = Foo.fn(); diff --git a/tests/baselines/reference/umd7.js b/tests/baselines/reference/umd7.js index 12d0a8651fc..acf1d011e4d 100644 --- a/tests/baselines/reference/umd7.js +++ b/tests/baselines/reference/umd7.js @@ -13,4 +13,4 @@ let y: number = Foo(); //// [a.js] /// -var y = exports.Foo(); +var y = Foo();