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."); + } +}`, +});