From 035c7ca90504dd31a8a0f65659c366ba0e3e8cc7 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 10 Dec 2020 10:17:28 -0800 Subject: [PATCH] Elide export assignment when it does not resolve to a value (#41904) * Only mark aliases that resolve to values referenced * Update other affected baselines * Remove redundant check --- src/compiler/checker.ts | 13 ++++++++----- .../reference/exportDefaultImportedType.js | 15 +++++++++++++++ ...ything-setup-correctly-and-reports-no-error.js | 1 - .../demo/updates-with-circular-reference.js | 1 - tests/cases/compiler/exportDefaultImportedType.ts | 10 ++++++++++ 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 tests/baselines/reference/exportDefaultImportedType.js create mode 100644 tests/cases/compiler/exportDefaultImportedType.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9f85b552378..08030f8452e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -22868,11 +22868,14 @@ namespace ts { function markAliasReferenced(symbol: Symbol, location: Node) { if (isNonLocalAlias(symbol, /*excludes*/ SymbolFlags.Value) && !isInTypeQuery(location) && !getTypeOnlyAliasDeclaration(symbol)) { - if (compilerOptions.preserveConstEnums && isExportOrExportExpression(location) || !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) { - markAliasSymbolAsReferenced(symbol); - } - else { - markConstEnumAliasAsReferenced(symbol); + const target = resolveAlias(symbol); + if (target.flags & SymbolFlags.Value) { + if (compilerOptions.preserveConstEnums && isExportOrExportExpression(location) || !isConstEnumOrConstEnumOnlyModule(target)) { + markAliasSymbolAsReferenced(symbol); + } + else { + markConstEnumAliasAsReferenced(symbol); + } } } } diff --git a/tests/baselines/reference/exportDefaultImportedType.js b/tests/baselines/reference/exportDefaultImportedType.js new file mode 100644 index 00000000000..e2531cd9d84 --- /dev/null +++ b/tests/baselines/reference/exportDefaultImportedType.js @@ -0,0 +1,15 @@ +//// [tests/cases/compiler/exportDefaultImportedType.ts] //// + +//// [exported.ts] +type Foo = number; +export { Foo }; + +//// [main.ts] +import { Foo } from "./exported"; +export default Foo; + + +//// [exported.js] +export {}; +//// [main.js] +export {}; diff --git a/tests/baselines/reference/tsbuild/demo/initial-build/in-master-branch-with-everything-setup-correctly-and-reports-no-error.js b/tests/baselines/reference/tsbuild/demo/initial-build/in-master-branch-with-everything-setup-correctly-and-reports-no-error.js index 54546e00acb..d761f8eff2b 100644 --- a/tests/baselines/reference/tsbuild/demo/initial-build/in-master-branch-with-everything-setup-correctly-and-reports-no-error.js +++ b/tests/baselines/reference/tsbuild/demo/initial-build/in-master-branch-with-everything-setup-correctly-and-reports-no-error.js @@ -215,7 +215,6 @@ export { createDog, Dog }; "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDog = void 0; -var animal_1 = require("./animal"); var dog_1 = require("./dog"); Object.defineProperty(exports, "createDog", { enumerable: true, get: function () { return dog_1.createDog; } }); diff --git a/tests/baselines/reference/tsbuild/watchMode/demo/updates-with-circular-reference.js b/tests/baselines/reference/tsbuild/watchMode/demo/updates-with-circular-reference.js index b3d953ce202..e17c8d56528 100644 --- a/tests/baselines/reference/tsbuild/watchMode/demo/updates-with-circular-reference.js +++ b/tests/baselines/reference/tsbuild/watchMode/demo/updates-with-circular-reference.js @@ -387,7 +387,6 @@ export default interface Animal { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDog = void 0; -var animal_1 = require("./animal"); var dog_1 = require("./dog"); Object.defineProperty(exports, "createDog", { enumerable: true, get: function () { return dog_1.createDog; } }); diff --git a/tests/cases/compiler/exportDefaultImportedType.ts b/tests/cases/compiler/exportDefaultImportedType.ts new file mode 100644 index 00000000000..93f874b26c4 --- /dev/null +++ b/tests/cases/compiler/exportDefaultImportedType.ts @@ -0,0 +1,10 @@ +// @module: es2015 +// @noTypesAndSymbols: true + +// @Filename: /exported.ts +type Foo = number; +export { Foo }; + +// @Filename: /main.ts +import { Foo } from "./exported"; +export default Foo;