diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts index 39d44aede66..efc02e7f615 100644 --- a/src/services/codefixes/fixAddMissingMember.ts +++ b/src/services/codefixes/fixAddMissingMember.ts @@ -694,7 +694,7 @@ function tryGetValueFromType(context: CodeFixContextBase, checker: TypeChecker, } if (isObjectLiteralType(type)) { const props = map(checker.getPropertiesOfType(type), prop => { - const initializer = prop.valueDeclaration ? tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeAtLocation(prop.valueDeclaration), enclosingDeclaration) : createUndefined(); + const initializer = tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeOfSymbol(prop), enclosingDeclaration); return factory.createPropertyAssignment(prop.name, initializer); }); return factory.createObjectLiteralExpression(props, /*multiLine*/ true); diff --git a/tests/cases/fourslash/codeFixAddMissingProperties27.ts b/tests/cases/fourslash/codeFixAddMissingProperties27.ts new file mode 100644 index 00000000000..2a0e333b83e --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingProperties27.ts @@ -0,0 +1,24 @@ +/// + +////interface Foo { +//// a?: boolean; +//// b: boolean; +////} +////type A = { [K in keyof Foo]-?: { name: K, value: `Foo ${Uppercase}` }} +////[|const a: A = {};|] + +verify.codeFix({ + index: 0, + description: ts.Diagnostics.Add_missing_properties.message, + newRangeContent: +`const a: A = { + a: { + name: "a", + value: "Foo A" + }, + b: { + name: "b", + value: "Foo B" + } +};`, +});