From 38cedc5b5fd4092b8897a54cca04af10e33ce237 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Thu, 3 Sep 2020 03:00:43 +0300 Subject: [PATCH] fix(39410): don't remove variables with type definition during converting named export to default (#39505) --- src/services/refactors/convertExport.ts | 7 ++++--- .../fourslash/refactorConvertExport_exportNodeKinds.ts | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/services/refactors/convertExport.ts b/src/services/refactors/convertExport.ts index 1ab52fadc9b..6912979261a 100644 --- a/src/services/refactors/convertExport.ts +++ b/src/services/refactors/convertExport.ts @@ -110,10 +110,11 @@ namespace ts.refactor { changes.insertNodeAfter(exportingSourceFile, exportKeyword, factory.createToken(SyntaxKind.DefaultKeyword)); break; case SyntaxKind.VariableStatement: - // If 'x' isn't used in this file, `export const x = 0;` --> `export default 0;` - if (!FindAllReferences.Core.isSymbolReferencedInFile(exportName, checker, exportingSourceFile)) { + // If 'x' isn't used in this file and doesn't have type definition, `export const x = 0;` --> `export default 0;` + const decl = first(exportNode.declarationList.declarations); + if (!FindAllReferences.Core.isSymbolReferencedInFile(exportName, checker, exportingSourceFile) && !decl.type) { // We checked in `getInfo` that an initializer exists. - changes.replaceNode(exportingSourceFile, exportNode, factory.createExportDefault(Debug.checkDefined(first(exportNode.declarationList.declarations).initializer, "Initializer was previously known to be present"))); + changes.replaceNode(exportingSourceFile, exportNode, factory.createExportDefault(Debug.checkDefined(decl.initializer, "Initializer was previously known to be present"))); break; } // falls through diff --git a/tests/cases/fourslash/refactorConvertExport_exportNodeKinds.ts b/tests/cases/fourslash/refactorConvertExport_exportNodeKinds.ts index 4e73f8e7c9f..412be6294f5 100644 --- a/tests/cases/fourslash/refactorConvertExport_exportNodeKinds.ts +++ b/tests/cases/fourslash/refactorConvertExport_exportNodeKinds.ts @@ -28,6 +28,9 @@ ////export const x = 0; ////x; +// @Filename: /var_with_type.ts +////export const fn: (n: number) => number = (n) => 1; + const tests: { [fileName: string]: string | undefined } = { fn: `export default function f() {}`, @@ -59,6 +62,11 @@ export default T; `const x = 0; export default x; x;`, + + var_with_type: +`const fn: (n: number) => number = (n) => 1; +export default fn; +`, }; for (const name in tests) {