diff --git a/src/services/refactors/extractType.ts b/src/services/refactors/extractType.ts index 813ee186f0faa..27e1dc0e841e4 100644 --- a/src/services/refactors/extractType.ts +++ b/src/services/refactors/extractType.ts @@ -160,7 +160,8 @@ namespace ts.refactor { selection ); changes.insertNodeBefore(file, firstStatement, ignoreSourceNewlines(newTypeNode), /* blankLineBetween */ true); - changes.replaceNode(file, selection, createTypeReferenceNode(name, typeParameters.map(id => createTypeReferenceNode(id.name, /* typeArguments */ undefined)))); + changes.replaceNode(file, selection, createTypeReferenceNode(name, typeParameters.map(id => createTypeReferenceNode(id.name, /* typeArguments */ undefined))), { trailingTriviaOption: textChanges.TrailingTriviaOption.Include }); + } function doInterfaceChange(changes: textChanges.ChangeTracker, file: SourceFile, name: string, info: InterfaceInfo) { diff --git a/tests/cases/fourslash/refactorExtractType69.ts b/tests/cases/fourslash/refactorExtractType69.ts new file mode 100644 index 0000000000000..44a42c787b303 --- /dev/null +++ b/tests/cases/fourslash/refactorExtractType69.ts @@ -0,0 +1,16 @@ +/// +/// Doesn't duplicate comments - #31629 + +//// type a = /*a*/{ x: string } /* foo */ | string /* bar */ /*b*/; + +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Extract type", + actionName: "Extract to type alias", + actionDescription: "Extract to type alias", + newContent: `type /*RENAME*/NewType = { + x: string; +} /* foo */ | string /* bar */; + +type a = NewType;`, +});