diff --git a/src/services/completions.ts b/src/services/completions.ts index 4a62b35310..2b21336141 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 0000000000..14e5979efb --- /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");