From 1c822c42a4d527c2f97a27cf1d5cfe2e5558e280 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Thu, 9 Feb 2023 03:25:39 +0200 Subject: [PATCH] feat(52097): "Add missing properties" quick fix for calculated string values ... (#52135) --- src/services/codefixes/fixAddMissingMember.ts | 2 +- .../codeFixAddMissingProperties27.ts | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixAddMissingProperties27.ts 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" + } +};`, +});