diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts
index 0371fff09c442..75182d9bb003e 100644
--- a/src/services/formatting/rules.ts
+++ b/src/services/formatting/rules.ts
@@ -162,6 +162,7 @@ namespace ts.formatting {
SyntaxKind.TypeKeyword,
SyntaxKind.FromKeyword,
SyntaxKind.KeyOfKeyword,
+ SyntaxKind.InferKeyword,
],
anyToken,
[isNonJsxSameLineTokenContext],
diff --git a/tests/cases/fourslash/formattingTypeInfer.ts b/tests/cases/fourslash/formattingTypeInfer.ts
new file mode 100644
index 0000000000000..f41a4ef19a828
--- /dev/null
+++ b/tests/cases/fourslash/formattingTypeInfer.ts
@@ -0,0 +1,45 @@
+///
+
+////
+/////*L1*/type C = T extends Array ? U : never;
+////
+/////*L2*/ type C < T > = T extends Array < infer U > ? U : never ;
+////
+/////*L3*/type C = T extends Array ? U : T;
+////
+/////*L4*/ type C < T > = T extends Array < infer U > ? U : T ;
+////
+/////*L5*/type Foo = T extends { a: infer U, b: infer U } ? U : never;
+////
+/////*L6*/ type Foo < T > = T extends { a : infer U , b : infer U } ? U : never ;
+////
+/////*L7*/type Bar = T extends { a: (x: infer U) => void, b: (x: infer U) => void } ? U : never;
+////
+/////*L8*/ type Bar < T > = T extends { a : (x : infer U ) => void , b : (x : infer U ) => void } ? U : never ;
+////
+
+format.document();
+
+goTo.marker("L1");
+verify.currentLineContentIs("type C = T extends Array ? U : never;");
+
+goTo.marker("L2");
+verify.currentLineContentIs("type C = T extends Array ? U : never;");
+
+goTo.marker("L3");
+verify.currentLineContentIs("type C = T extends Array ? U : T;");
+
+goTo.marker("L4");
+verify.currentLineContentIs("type C = T extends Array ? U : T;");
+
+goTo.marker("L5");
+verify.currentLineContentIs("type Foo = T extends { a: infer U, b: infer U } ? U : never;");
+
+goTo.marker("L6");
+verify.currentLineContentIs("type Foo = T extends { a: infer U, b: infer U } ? U : never;");
+
+goTo.marker("L7");
+verify.currentLineContentIs("type Bar = T extends { a: (x: infer U) => void, b: (x: infer U) => void } ? U : never;");
+
+goTo.marker("L8");
+verify.currentLineContentIs("type Bar = T extends { a: (x: infer U) => void, b: (x: infer U) => void } ? U : never;");
\ No newline at end of file