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
This commit is contained in:
Andrew Branch 2020-12-10 10:17:28 -08:00 committed by GitHub
parent d156bb805e
commit 035c7ca905
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 33 additions and 7 deletions

View File

@ -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);
}
}
}
}

View File

@ -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 {};

View File

@ -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; } });

View File

@ -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; } });

View File

@ -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;