From 23601a10b80ffa97bd5f0f575fb6d8e971e77aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E7=92=90?= Date: Thu, 2 Aug 2018 09:44:34 +0800 Subject: [PATCH] improve completions for union type in type arguments --- src/services/completions.ts | 2 ++ .../cases/fourslash/completionListForStringUnion.ts | 12 ++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 tests/cases/fourslash/completionListForStringUnion.ts 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");