diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts
index 075bfdcc627..2da93eac7b6 100644
--- a/src/services/formatting/rules.ts
+++ b/src/services/formatting/rules.ts
@@ -240,11 +240,12 @@ export function getAllRules(): RuleSpec[] {
rule("NoSpaceBetweenCloseParenAndAngularBracket", SyntaxKind.CloseParenToken, SyntaxKind.LessThanToken, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], RuleAction.DeleteSpace),
rule("NoSpaceAfterOpenAngularBracket", SyntaxKind.LessThanToken, anyToken, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], RuleAction.DeleteSpace),
rule("NoSpaceBeforeCloseAngularBracket", anyToken, SyntaxKind.GreaterThanToken, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], RuleAction.DeleteSpace),
- rule("NoSpaceAfterCloseAngularBracket",
- SyntaxKind.GreaterThanToken,
- [SyntaxKind.OpenParenToken, SyntaxKind.OpenBracketToken, SyntaxKind.GreaterThanToken, SyntaxKind.CommaToken],
- [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext, isNotFunctionDeclContext /*To prevent an interference with the SpaceBeforeOpenParenInFuncDecl rule*/],
- RuleAction.DeleteSpace),
+ rule("NoSpaceAfterCloseAngularBracket", SyntaxKind.GreaterThanToken, [SyntaxKind.OpenParenToken, SyntaxKind.OpenBracketToken, SyntaxKind.GreaterThanToken, SyntaxKind.CommaToken], [
+ isNonJsxSameLineTokenContext,
+ isTypeArgumentOrParameterOrAssertionContext,
+ isNotFunctionDeclContext /*To prevent an interference with the SpaceBeforeOpenParenInFuncDecl rule*/,
+ isNonTypeAssertionContext
+ ], RuleAction.DeleteSpace),
// decorators
rule("SpaceBeforeAt", [SyntaxKind.CloseParenToken, SyntaxKind.Identifier], SyntaxKind.AtToken, [isNonJsxSameLineTokenContext], RuleAction.InsertSpace),
@@ -835,6 +836,10 @@ function isTypeAssertionContext(context: FormattingContext): boolean {
return context.contextNode.kind === SyntaxKind.TypeAssertionExpression;
}
+function isNonTypeAssertionContext(context: FormattingContext): boolean {
+ return !isTypeAssertionContext(context);
+}
+
function isVoidOpContext(context: FormattingContext): boolean {
return context.currentTokenSpan.kind === SyntaxKind.VoidKeyword && context.currentTokenParent.kind === SyntaxKind.VoidExpression;
}
diff --git a/tests/cases/fourslash/formatInsertSpaceAfterTypeAssertion.ts b/tests/cases/fourslash/formatInsertSpaceAfterTypeAssertion.ts
new file mode 100644
index 00000000000..ee3dbd0c05f
--- /dev/null
+++ b/tests/cases/fourslash/formatInsertSpaceAfterTypeAssertion.ts
@@ -0,0 +1,19 @@
+///
+
+////let a = "";
+////let b = 1;
+////let c = [];
+////let d = [];
+////let e = ["e"];
+
+format.setFormatOptions({
+ insertSpaceAfterTypeAssertion: true,
+})
+format.document();
+verify.currentFileContentIs(
+`let a= "";
+let b= 1;
+let c= [];
+let d= [];
+let e= ["e"];`
+);