diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index caab75c99fa8a..4583dca0806ee 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -14453,7 +14453,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
const nameType = property.name && (isJsxNamespacedName(property.name) ? getStringLiteralType(getTextOfJsxAttributeName(property.name)) : getLiteralTypeFromPropertyName(property.name));
const name = nameType && isTypeUsableAsPropertyName(nameType) ? getPropertyNameFromType(nameType) : undefined;
const expected = name === undefined ? undefined : getTypeOfPropertyOfType(contextualType, name);
- return !!expected && isLiteralType(expected) && !isTypeAssignableTo(getTypeOfNode(property), expected);
+ return !!expected && (isLiteralType(expected) || isPatternLiteralType(expected)) && !isTypeAssignableTo(getTypeOfNode(property), expected);
});
}
diff --git a/tests/cases/fourslash/completionsDiscriminatedUnion2.ts b/tests/cases/fourslash/completionsDiscriminatedUnion2.ts
new file mode 100644
index 0000000000000..2167b8a706499
--- /dev/null
+++ b/tests/cases/fourslash/completionsDiscriminatedUnion2.ts
@@ -0,0 +1,19 @@
+///
+
+// @strict: true
+
+//// type A = {
+//// id: `A:${string}`;
+//// a: number;
+//// };
+////
+//// type B = {
+//// id: `B:${string}`;
+//// b: number;
+//// };
+////
+//// function foo(item: T): void {}
+////
+//// foo({ id: "B:", /**/ });
+
+verify.completions({ marker: "", exact: ["b"] });