diff --git a/src/services/completions.ts b/src/services/completions.ts
index bdf97266cf9..471d8e4c142 100644
--- a/src/services/completions.ts
+++ b/src/services/completions.ts
@@ -2077,7 +2077,7 @@ namespace ts.Completions {
switch (contextToken.kind) {
case SyntaxKind.CommaToken:
return containingNodeKind === SyntaxKind.VariableDeclaration ||
- containingNodeKind === SyntaxKind.VariableDeclarationList ||
+ isVariableDeclarationListButNotTypeArgument(contextToken) ||
containingNodeKind === SyntaxKind.VariableStatement ||
containingNodeKind === SyntaxKind.EnumDeclaration || // enum a { foo, |
isFunctionLikeButNotConstructor(containingNodeKind) ||
@@ -2209,6 +2209,11 @@ namespace ts.Completions {
return false;
}
+ function isVariableDeclarationListButNotTypeArgument(node: Node): boolean {
+ return node.parent.kind === SyntaxKind.VariableDeclarationList
+ && !isPossiblyTypeArgumentPosition(node, sourceFile, typeChecker);
+ }
+
/**
* Filters out completion suggestions for named imports or exports.
*
diff --git a/tests/cases/fourslash/completionsAtGenericTypeArguments.ts b/tests/cases/fourslash/completionsAtGenericTypeArguments.ts
new file mode 100644
index 00000000000..216ae6cab70
--- /dev/null
+++ b/tests/cases/fourslash/completionsAtGenericTypeArguments.ts
@@ -0,0 +1,12 @@
+///
+
+////class Foo {}
+////const foo = new Foo*1*/, /*2*/,
+////
+////function foo() {}
+////const f = foo*3*/, /*4*/,
+
+verify.completions({ marker: "1", exact: completion.globalTypesPlus(['Foo']) });
+verify.completions({ marker: "2", exact: completion.globalTypesPlus(['Foo']) });
+verify.completions({ marker: "3", exact: completion.globalTypesPlus(['Foo']) });
+verify.completions({ marker: "4", exact: completion.globalTypesPlus(['Foo']) });