diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts index efc02e7f615..acd0ddda331 100644 --- a/src/services/codefixes/fixAddMissingMember.ts +++ b/src/services/codefixes/fixAddMissingMember.ts @@ -317,7 +317,8 @@ function getInfo(sourceFile: SourceFile, tokenPos: number, errorCode: number, ch if (!isMemberName(token)) return undefined; if (isIdentifier(token) && hasInitializer(parent) && parent.initializer && isObjectLiteralExpression(parent.initializer)) { - const properties = arrayFrom(checker.getUnmatchedProperties(checker.getTypeAtLocation(parent.initializer), checker.getTypeAtLocation(token), /* requireOptionalProperties */ false, /* matchDiscriminantProperties */ false)); + const targetType = checker.getContextualType(token) || checker.getTypeAtLocation(token); + const properties = arrayFrom(checker.getUnmatchedProperties(checker.getTypeAtLocation(parent.initializer), targetType, /* requireOptionalProperties */ false, /* matchDiscriminantProperties */ false)); if (!length(properties)) return undefined; return { kind: InfoKind.ObjectLiteral, token, properties, parentDeclaration: parent.initializer }; diff --git a/tests/cases/fourslash/codeFixAddMissingProperties28.ts b/tests/cases/fourslash/codeFixAddMissingProperties28.ts new file mode 100644 index 00000000000..ac0c44b76a4 --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingProperties28.ts @@ -0,0 +1,28 @@ +/// + +////interface Foo { +//// a: number; +//// b: string; +////} +//// +////interface Bar { +//// value: Foo; +////} +//// +////[|const bar: Bar = { +//// value: { +//// a: 10 +//// } +////}|] + +verify.codeFix({ + index: 0, + description: ts.Diagnostics.Add_missing_properties.message, + newRangeContent: +`const bar: Bar = { + value: { + a: 10, + b: "" + } +}`, +});