diff --git a/src/services/completions.ts b/src/services/completions.ts
index 4a62b353101..2b213361418 100644
--- a/src/services/completions.ts
+++ b/src/services/completions.ts
@@ -402,6 +402,8 @@ namespace ts.Completions {
return stringLiteralCompletionsFromProperties(typeChecker.getTypeFromTypeNode((node.parent.parent as IndexedAccessTypeNode).objectType));
case SyntaxKind.ImportType:
return { kind: StringLiteralCompletionKind.Paths, paths: PathCompletions.getStringLiteralCompletionsFromModuleNames(sourceFile, node, compilerOptions, host, typeChecker) };
+ case SyntaxKind.UnionType:
+ return isTypeReferenceNode(node.parent.parent.parent) ? { kind: StringLiteralCompletionKind.Types, types: getStringLiteralTypes(typeChecker.getTypeArgumentConstraint(node.parent.parent as UnionTypeNode)), isNewIdentifier: false } : undefined;
default:
return undefined;
}
diff --git a/tests/cases/fourslash/completionListForStringUnion.ts b/tests/cases/fourslash/completionListForStringUnion.ts
new file mode 100644
index 00000000000..14e5979efbd
--- /dev/null
+++ b/tests/cases/fourslash/completionListForStringUnion.ts
@@ -0,0 +1,12 @@
+///
+
+//// type A = 'fooooo' | 'barrrrr';
+//// type B = {};
+//// type C = B<'fooooo' | '/**/'>
+
+
+goTo.marker();
+verify.completionListContains("fooooo");
+verify.completionListContains("barrrrr");
+edit.insert("b");
+verify.completionListContains("barrrrr");