diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts
index 066252bd9a5..3c09c850ce5 100644
--- a/src/services/codefixes/fixAddMissingMember.ts
+++ b/src/services/codefixes/fixAddMissingMember.ts
@@ -485,7 +485,7 @@ namespace ts.codefix {
const checker = context.program.getTypeChecker();
const props = map(info.properties, prop => {
const initializer = tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeOfSymbol(prop), info.parentDeclaration);
- return factory.createPropertyAssignment(createPropertyNameNodeForIdentifierOrLiteral(prop.name, target, quotePreference === QuotePreference.Single), initializer);
+ return factory.createPropertyAssignment(createPropertyNameFromSymbol(prop, target, quotePreference, checker), initializer);
});
const options = {
leadingTriviaOption: textChanges.LeadingTriviaOption.Exclude,
@@ -608,4 +608,14 @@ namespace ts.codefix {
const declaration = findAncestor(callExpression, n => isMethodDeclaration(n) || isConstructorDeclaration(n));
return declaration && declaration.parent === node ? declaration : undefined;
}
+
+ function createPropertyNameFromSymbol(symbol: Symbol, target: ScriptTarget, quotePreference: QuotePreference, checker: TypeChecker) {
+ if (isTransientSymbol(symbol) && symbol.nameType && symbol.nameType.flags & TypeFlags.UniqueESSymbol) {
+ const expression = checker.symbolToExpression((symbol.nameType as UniqueESSymbolType).symbol, SymbolFlags.Value, symbol.valueDeclaration, NodeBuilderFlags.AllowUniqueESSymbolType);
+ if (expression) {
+ return factory.createComputedPropertyName(expression);
+ }
+ }
+ return createPropertyNameNodeForIdentifierOrLiteral(symbol.name, target, quotePreference === QuotePreference.Single);
+ }
}
diff --git a/tests/cases/fourslash/codeFixAddMissingProperties22.ts b/tests/cases/fourslash/codeFixAddMissingProperties22.ts
new file mode 100644
index 00000000000..5bd5ec0705b
--- /dev/null
+++ b/tests/cases/fourslash/codeFixAddMissingProperties22.ts
@@ -0,0 +1,15 @@
+///
+
+// @lib: es2020
+////const x: Iterable = {}
+
+verify.codeFix({
+ index: 0,
+ description: ts.Diagnostics.Add_missing_properties.message,
+ newFileContent:
+`const x: Iterable = {
+ [Symbol.iterator]: function(): Iterator {
+ throw new Error("Function not implemented.");
+ }
+}`,
+});