diff --git a/src/harness/fourslashInterfaceImpl.ts b/src/harness/fourslashInterfaceImpl.ts
index f946e2d8bc3..e96641c2dbb 100644
--- a/src/harness/fourslashInterfaceImpl.ts
+++ b/src/harness/fourslashInterfaceImpl.ts
@@ -993,7 +993,7 @@ namespace FourSlashInterface {
export const keywords: readonly ExpectedCompletionEntryObject[] = keywordsWithUndefined.filter(k => k.name !== "undefined");
export const typeKeywords: readonly ExpectedCompletionEntryObject[] =
- ["false", "null", "true", "void", "asserts", "any", "boolean", "keyof", "never", "readonly", "number", "object", "string", "symbol", "undefined", "unique", "unknown", "bigint"].map(keywordEntry);
+ ["false", "null", "true", "void", "asserts", "any", "boolean", "infer", "keyof", "never", "readonly", "number", "object", "string", "symbol", "undefined", "unique", "unknown", "bigint"].map(keywordEntry);
const globalTypeDecls: readonly ExpectedCompletionEntryObject[] = [
interfaceEntry("Symbol"),
@@ -1254,6 +1254,7 @@ namespace FourSlashInterface {
"await",
"boolean",
"declare",
+ "infer",
"keyof",
"module",
"namespace",
@@ -1456,6 +1457,7 @@ namespace FourSlashInterface {
"await",
"boolean",
"declare",
+ "infer",
"keyof",
"module",
"namespace",
diff --git a/src/services/completions.ts b/src/services/completions.ts
index 02f4700b051..810a7dfdebe 100644
--- a/src/services/completions.ts
+++ b/src/services/completions.ts
@@ -2266,6 +2266,7 @@ namespace ts.Completions {
case SyntaxKind.ImportKeyword:
case SyntaxKind.LetKeyword:
case SyntaxKind.ConstKeyword:
+ case SyntaxKind.InferKeyword:
case SyntaxKind.TypeKeyword: // type htm|
return true;
diff --git a/src/services/utilities.ts b/src/services/utilities.ts
index 0a5af0a5175..bcfe1f8aff4 100644
--- a/src/services/utilities.ts
+++ b/src/services/utilities.ts
@@ -1723,6 +1723,7 @@ namespace ts {
SyntaxKind.BigIntKeyword,
SyntaxKind.BooleanKeyword,
SyntaxKind.FalseKeyword,
+ SyntaxKind.InferKeyword,
SyntaxKind.KeyOfKeyword,
SyntaxKind.NeverKeyword,
SyntaxKind.NullKeyword,
diff --git a/tests/cases/fourslash/completionListAtIdentifierDefinitionLocations_infers.ts b/tests/cases/fourslash/completionListAtIdentifierDefinitionLocations_infers.ts
new file mode 100644
index 00000000000..159fff06fa6
--- /dev/null
+++ b/tests/cases/fourslash/completionListAtIdentifierDefinitionLocations_infers.ts
@@ -0,0 +1,8 @@
+///
+
+//// type UType = 1;
+//// type Bar = T extends { a: (x: infer /*1*/) => void; b: (x: infer U/*2*/) => void }
+//// ? U
+//// : never;
+
+verify.completions({ marker: test.markers(), exact: undefined });
diff --git a/tests/cases/fourslash/completionListInferKeyword.ts b/tests/cases/fourslash/completionListInferKeyword.ts
new file mode 100644
index 00000000000..a0068b0b91b
--- /dev/null
+++ b/tests/cases/fourslash/completionListInferKeyword.ts
@@ -0,0 +1,10 @@
+///
+
+//// type Bar = T extends { a: (x: in/**/) => void }
+//// ? U
+//// : never;
+
+verify.completions({
+ marker: "",
+ includes: [{ name: "infer", kind: "keyword", sortText: completion.SortText.GlobalsOrKeywords }]
+});