@@ -1053,18 +1053,29 @@ namespace ts.textChanges {
10531053 break ;
10541054
10551055 case SyntaxKind . TypeParameter : {
1056- const typeParameters = getEffectiveTypeParameterDeclarations ( < DeclarationWithTypeParameters > node . parent ) ;
1057- if ( typeParameters . length === 1 ) {
1058- const { pos, end } = cast ( typeParameters , isNodeArray ) ;
1059- const previousToken = getTokenAtPosition ( sourceFile , pos - 1 ) ;
1060- const nextToken = getTokenAtPosition ( sourceFile , end ) ;
1061- Debug . assert ( previousToken . kind === SyntaxKind . LessThanToken ) ;
1062- Debug . assert ( nextToken . kind === SyntaxKind . GreaterThanToken ) ;
1063-
1064- changes . deleteNodeRange ( sourceFile , previousToken , nextToken ) ;
1065- }
1066- else {
1067- deleteNodeInList ( changes , deletedNodesInLists , sourceFile , node ) ;
1056+ const typeParam = node as TypeParameterDeclaration ;
1057+ switch ( typeParam . parent . kind ) {
1058+ case SyntaxKind . JSDocTemplateTag :
1059+ changes . deleteRange ( sourceFile , getRangeToDeleteJsDocTag ( typeParam . parent , sourceFile ) ) ;
1060+ break ;
1061+ case SyntaxKind . InferType :
1062+ // TODO: GH#25594
1063+ break ;
1064+ default : {
1065+ const typeParameters = getEffectiveTypeParameterDeclarations ( typeParam . parent ) ;
1066+ if ( typeParameters . length === 1 ) {
1067+ const { pos, end } = cast ( typeParameters , isNodeArray ) ;
1068+ const previousToken = getTokenAtPosition ( sourceFile , pos - 1 ) ;
1069+ const nextToken = getTokenAtPosition ( sourceFile , end ) ;
1070+ Debug . assert ( previousToken . kind === SyntaxKind . LessThanToken ) ;
1071+ Debug . assert ( nextToken . kind === SyntaxKind . GreaterThanToken ) ;
1072+
1073+ changes . deleteNodeRange ( sourceFile , previousToken , nextToken ) ;
1074+ }
1075+ else {
1076+ deleteNodeInList ( changes , deletedNodesInLists , sourceFile , node ) ;
1077+ }
1078+ }
10681079 }
10691080 break ;
10701081 }
@@ -1166,6 +1177,12 @@ namespace ts.textChanges {
11661177 Debug . assertNever ( gp ) ;
11671178 }
11681179 }
1180+
1181+ function getRangeToDeleteJsDocTag ( node : JSDocTag , sourceFile : SourceFile ) : TextRange {
1182+ const { parent } = node ;
1183+ const toDelete = parent . kind === SyntaxKind . JSDocComment && parent . comment === undefined && parent . tags ! . length === 1 ? parent : node ;
1184+ return createTextRangeFromNode ( toDelete , sourceFile ) ;
1185+ }
11691186 }
11701187
11711188 /** Warning: This deletes comments too. See `copyComments` in `convertFunctionToEs6Class`. */
0 commit comments