diff --git a/src/services/stringCompletions.ts b/src/services/stringCompletions.ts
index f363ff2fe14..cc0b94507d8 100644
--- a/src/services/stringCompletions.ts
+++ b/src/services/stringCompletions.ts
@@ -223,7 +223,9 @@ namespace ts.Completions.StringCompletions {
function stringLiteralCompletionsFromProperties(type: Type | undefined): StringLiteralCompletionsFromProperties | undefined {
return type && {
kind: StringLiteralCompletionKind.Properties,
- symbols: type.getApparentProperties().filter(prop => !isPrivateIdentifierPropertyDeclaration(prop.valueDeclaration)),
+ symbols: type.getApparentProperties().filter(prop =>
+ !isPrivateIdentifierPropertyDeclaration(
+ isTransientSymbol(prop) && prop.syntheticOrigin ? prop.syntheticOrigin.valueDeclaration : prop.valueDeclaration)),
hasIndexSignature: hasIndexSignature(type)
};
}
diff --git a/tests/cases/fourslash/completionForStringLiteral_mappedTypeMembers.ts b/tests/cases/fourslash/completionForStringLiteral_mappedTypeMembers.ts
new file mode 100644
index 00000000000..0822cf9eafa
--- /dev/null
+++ b/tests/cases/fourslash/completionForStringLiteral_mappedTypeMembers.ts
@@ -0,0 +1,18 @@
+///
+
+////type Foo = {
+//// a: string;
+//// b: string;
+////};
+////
+////type A = Readonly;
+////type B = A["[|/**/|]"]
+
+const replacementSpan = test.ranges()[0];
+verify.completions({
+ marker: "",
+ exact: [
+ { name: "a", replacementSpan },
+ { name: "b", replacementSpan }
+ ]
+});