diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts
index 4fd5462d9f8..6cee68f7e12 100644
--- a/src/compiler/emitter.ts
+++ b/src/compiler/emitter.ts
@@ -3012,17 +3012,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
return result;
}
- function emitEs6ExportDefaultCompat() {
- if (compilerOptions.module === ModuleKind.CommonJS || compilerOptions.module === ModuleKind.AMD || compilerOptions.module === ModuleKind.UMD) {
- if (!hasProperty(currentSourceFile.identifiers, "___esModule")) {
- if (languageVersion >= ScriptTarget.ES5) {
- // default value of configurable, enumerable, writable are `false`.
- write("Object.defineProperty(exports, \"__esModule\", { value: true });");
- writeLine();
- }
- else {
- write("exports.__esModule = true;");
- writeLine();
+ function emitEs6ExportDefaultCompat(node: Node) {
+ if (node.parent.kind === SyntaxKind.SourceFile && (!!(node.flags & NodeFlags.Default) || node.kind === SyntaxKind.ExportAssignment)) {
+ // only allow export default at a source file level
+ if (compilerOptions.module === ModuleKind.CommonJS || compilerOptions.module === ModuleKind.AMD || compilerOptions.module === ModuleKind.UMD) {
+ if (!currentSourceFile.symbol.exports["___esModule"]) {
+ if (languageVersion === ScriptTarget.ES5) {
+ // default value of configurable, enumerable, writable are `false`.
+ write("Object.defineProperty(exports, \"__esModule\", { value: true });");
+ writeLine();
+ }
+ else if (languageVersion === ScriptTarget.ES3) {
+ write("exports.__esModule = true;");
+ writeLine();
+ }
}
}
}
@@ -3050,7 +3053,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
}
else {
if (node.flags & NodeFlags.Default) {
- emitEs6ExportDefaultCompat();
+ emitEs6ExportDefaultCompat(node);
if (languageVersion === ScriptTarget.ES3) {
write("exports[\"default\"]");
}
@@ -5547,7 +5550,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
write(")");
}
else {
- emitEs6ExportDefaultCompat();
+ emitEs6ExportDefaultCompat(node);
emitContainingModuleName(node);
if (languageVersion === ScriptTarget.ES3) {
write("[\"default\"] = ");
diff --git a/tests/baselines/reference/es5-commonjs6.js b/tests/baselines/reference/es5-commonjs6.js
new file mode 100644
index 00000000000..7c2c8b21779
--- /dev/null
+++ b/tests/baselines/reference/es5-commonjs6.js
@@ -0,0 +1,10 @@
+//// [es5-commonjs6.ts]
+
+export default "test";
+var __esModule = 1;
+
+
+//// [es5-commonjs6.js]
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.default = "test";
+var __esModule = 1;
diff --git a/tests/baselines/reference/es5-commonjs6.symbols b/tests/baselines/reference/es5-commonjs6.symbols
new file mode 100644
index 00000000000..7a2847e0f25
--- /dev/null
+++ b/tests/baselines/reference/es5-commonjs6.symbols
@@ -0,0 +1,6 @@
+=== tests/cases/compiler/es5-commonjs6.ts ===
+
+export default "test";
+var __esModule = 1;
+>__esModule : Symbol(__esModule, Decl(es5-commonjs6.ts, 2, 3))
+
diff --git a/tests/baselines/reference/es5-commonjs6.types b/tests/baselines/reference/es5-commonjs6.types
new file mode 100644
index 00000000000..904b69dec22
--- /dev/null
+++ b/tests/baselines/reference/es5-commonjs6.types
@@ -0,0 +1,7 @@
+=== tests/cases/compiler/es5-commonjs6.ts ===
+
+export default "test";
+var __esModule = 1;
+>__esModule : number
+>1 : number
+
diff --git a/tests/baselines/reference/tsxAttributeResolution9.symbols b/tests/baselines/reference/tsxAttributeResolution9.symbols
deleted file mode 100644
index 081482d5d47..00000000000
--- a/tests/baselines/reference/tsxAttributeResolution9.symbols
+++ /dev/null
@@ -1,47 +0,0 @@
-=== tests/cases/conformance/jsx/react.d.ts ===
-
-declare module JSX {
->JSX : Symbol(JSX, Decl(react.d.ts, 0, 0))
-
- interface Element { }
->Element : Symbol(Element, Decl(react.d.ts, 1, 20))
-
- interface IntrinsicElements {
->IntrinsicElements : Symbol(IntrinsicElements, Decl(react.d.ts, 2, 22))
- }
- interface ElementAttributesProperty {
->ElementAttributesProperty : Symbol(ElementAttributesProperty, Decl(react.d.ts, 4, 2))
-
- props;
->props : Symbol(props, Decl(react.d.ts, 5, 38))
- }
-}
-
-interface Props {
->Props : Symbol(Props, Decl(react.d.ts, 8, 1))
-
- foo: string;
->foo : Symbol(foo, Decl(react.d.ts, 10, 17))
-}
-
-=== tests/cases/conformance/jsx/file.tsx ===
-export class MyComponent {
->MyComponent : Symbol(MyComponent, Decl(file.tsx, 0, 0))
-
- render() {
->render : Symbol(render, Decl(file.tsx, 0, 26))
- }
-
- props: { foo: string; }
->props : Symbol(props, Decl(file.tsx, 2, 3))
->foo : Symbol(foo, Decl(file.tsx, 4, 10))
-}
-
-; // ok
->MyComponent : Symbol(MyComponent, Decl(file.tsx, 0, 0))
->foo : Symbol(unknown)
-
-; // should be an error
->MyComponent : Symbol(MyComponent, Decl(file.tsx, 0, 0))
->foo : Symbol(unknown)
-
diff --git a/tests/baselines/reference/tsxAttributeResolution9.types b/tests/baselines/reference/tsxAttributeResolution9.types
deleted file mode 100644
index 1b2c6d42389..00000000000
--- a/tests/baselines/reference/tsxAttributeResolution9.types
+++ /dev/null
@@ -1,49 +0,0 @@
-=== tests/cases/conformance/jsx/react.d.ts ===
-
-declare module JSX {
->JSX : any
-
- interface Element { }
->Element : Element
-
- interface IntrinsicElements {
->IntrinsicElements : IntrinsicElements
- }
- interface ElementAttributesProperty {
->ElementAttributesProperty : ElementAttributesProperty
-
- props;
->props : any
- }
-}
-
-interface Props {
->Props : Props
-
- foo: string;
->foo : string
-}
-
-=== tests/cases/conformance/jsx/file.tsx ===
-export class MyComponent {
->MyComponent : MyComponent
-
- render() {
->render : () => void
- }
-
- props: { foo: string; }
->props : { foo: string; }
->foo : string
-}
-
-; // ok
-> : JSX.Element
->MyComponent : typeof MyComponent
->foo : any
-
-; // should be an error
-> : JSX.Element
->MyComponent : typeof MyComponent
->foo : any
-
diff --git a/tests/cases/compiler/es5-commonjs6.ts b/tests/cases/compiler/es5-commonjs6.ts
new file mode 100644
index 00000000000..676e5bddb48
--- /dev/null
+++ b/tests/cases/compiler/es5-commonjs6.ts
@@ -0,0 +1,7 @@
+// @target: ES5
+// @sourcemap: false
+// @declaration: false
+// @module: commonjs
+
+export default "test";
+var __esModule = 1;