diff --git a/ycmd/completers/typescript/typescript_completer.py b/ycmd/completers/typescript/typescript_completer.py
index 99439421da..0d4cd699ca 100644
--- a/ycmd/completers/typescript/typescript_completer.py
+++ b/ycmd/completers/typescript/typescript_completer.py
@@ -911,7 +911,12 @@ def _GetDoc( self, request_data ):
       'offset': request_data[ 'column_codepoint' ]
     } )
 
+    extra_info = _AggregateTagsFromDocstring( info )
+
     message = f'{ info[ "displayString" ] }\n\n{ info[ "documentation" ] }'
+    if extra_info:
+      message += f'\n\n{ extra_info }'
+
     return responses.BuildDetailedInfoResponse( message )
 
 
@@ -1117,6 +1122,16 @@ def _LogLevel():
   return 'verbose' if LOGGER.isEnabledFor( logging.DEBUG ) else 'normal'
 
 
+def _AggregateTagsFromDocstring( info ):
+  extra_info = []
+  for tag in info.get( 'tags', [] ):
+    tag_name = tag[ 'name' ]
+    tag_text = tag.get( 'text' )
+    formated_tag = tag_name + ( f': { tag_text }' if tag_text else '' )
+    extra_info.append( formated_tag )
+  return '\n'.join( extra_info )
+
+
 def _BuildCompletionExtraMenuAndDetailedInfo( request_data, entry ):
   signature = _DisplayPartsToString( entry[ 'displayParts' ] )
   if entry[ 'name' ] == signature:
@@ -1130,6 +1145,11 @@ def _BuildCompletionExtraMenuAndDetailedInfo( request_data, entry ):
 
   docs = entry.get( 'documentation', [] )
   detailed_info += [ doc[ 'text' ].strip() for doc in docs if doc ]
+
+  extra_info = _AggregateTagsFromDocstring( entry )
+  if extra_info:
+    detailed_info.append( extra_info )
+
   detailed_info = '\n\n'.join( detailed_info )
 
   return extra_menu_info, detailed_info
diff --git a/ycmd/tests/javascriptreact/get_completions_test.py b/ycmd/tests/javascriptreact/get_completions_test.py
index 958413df05..40b9993489 100644
--- a/ycmd/tests/javascriptreact/get_completions_test.py
+++ b/ycmd/tests/javascriptreact/get_completions_test.py
@@ -75,7 +75,11 @@ def test_GetCompletions_JavaScriptReact_DefaultTriggers( self, app ):
              'detailed_info':  '(property) Document.alinkColor: string\n'
                                '\n'
                                'Sets or gets the color of all active links '
-                               'in the document.',
+                               'in the document.\n'
+                               '\n'
+                               'deprecated: [MDN Reference]'
+                               '(https://developer.mozilla.org/docs/Web/'
+                               'API/Document/alinkColor)',
             'kind':            'property',
           } ) )
         } )
diff --git a/ycmd/tests/typescript/get_completions_test.py b/ycmd/tests/typescript/get_completions_test.py
index 8a8f961ad7..2956f19800 100644
--- a/ycmd/tests/typescript/get_completions_test.py
+++ b/ycmd/tests/typescript/get_completions_test.py
@@ -357,3 +357,34 @@ def test_GetCompletions_TypeScriptReact_DefaultTriggers( self, app ):
         } )
       }
     } )
+
+
+  @SharedYcmd
+  def test_GetCompletions_WithTags( self, app ):
+    filepath = PathToTestFile( 'signatures.ts' )
+    RunTest( app, {
+      'description': 'No need to force after a semantic trigger',
+      'request': {
+        'line_num': 101,
+        'column_num': 24,
+        'filepath': filepath,
+        'filetype': 'typescript'
+      },
+      'expect': {
+        'response': requests.codes.ok,
+        'data': has_entries( {
+          'completions': has_item( has_entries( {
+            'insertion_text': 'single_argument_with_doc',
+            'extra_data': {},
+            'extra_menu_info':
+                'function single_argument_with_doc(a: string): string',
+            'detailed_info':
+                'function single_argument_with_doc(a: string): string\n\n'
+                'A function with a single argument\n\n'
+                'param: a - The argument\n'
+                'returns: - The hashed input',
+            'kind': 'function'
+          } ) )
+        } )
+      }
+    } )
diff --git a/ycmd/tests/typescript/subcommands_test.py b/ycmd/tests/typescript/subcommands_test.py
index e64acb2546..33464090df 100644
--- a/ycmd/tests/typescript/subcommands_test.py
+++ b/ycmd/tests/typescript/subcommands_test.py
@@ -610,6 +610,29 @@ def test_Subcommands_GetDoc_Class_Unicode( self, app ):
     } )
 
 
+  @SharedYcmd
+  def test_Subcommands_GetDoc_FreeFunction_WithTags( self, app ):
+    RunTest( app, {
+      'description': 'GetDoc shows documentation of param and returns tags',
+      'request': {
+        'command': 'GetDoc',
+        'line_num': 101,
+        'column_num': 12,
+        'filepath': PathToTestFile( 'signatures.ts' ),
+      },
+      'expect': {
+        'response': requests.codes.ok,
+        'data': has_entries( {
+          'detailed_info':
+              'function single_argument_with_doc(a: string): string\n\n'
+              'A function with a single argument\n\n'
+              'param: a - The argument\n'
+              'returns: - The hashed input'
+        } )
+      }
+    } )
+
+
   @SharedYcmd
   def test_Subcommands_GoToReferences( self, app ):
     RunTest( app, {