diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts index dda0903562a..d1d0afb9059 100644 --- a/src/services/codefixes/fixAddMissingMember.ts +++ b/src/services/codefixes/fixAddMissingMember.ts @@ -185,6 +185,10 @@ namespace ts.codefix { const widenedType = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(otherExpression))); typeNode = checker.typeToTypeNode(widenedType, classDeclaration); } + else { + const contextualType = checker.getContextualType(token.parent as Expression); + typeNode = contextualType ? checker.typeToTypeNode(contextualType) : undefined; + } return typeNode || createKeywordTypeNode(SyntaxKind.AnyKeyword); } diff --git a/tests/cases/fourslash/codeFixAddMissingMember12.ts b/tests/cases/fourslash/codeFixAddMissingMember12.ts new file mode 100644 index 00000000000..c45939f1d17 --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingMember12.ts @@ -0,0 +1,14 @@ +/// + +//// class C {} +//// const x: number = new C().x; + +verify.codeFix({ + description: "Declare property 'x'", + index: 0, + newFileContent: +`class C { + x: number; +} +const x: number = new C().x;` +}); diff --git a/tests/cases/fourslash/codeFixAddMissingMember13.ts b/tests/cases/fourslash/codeFixAddMissingMember13.ts new file mode 100644 index 00000000000..17c6f3aa0e1 --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingMember13.ts @@ -0,0 +1,14 @@ +/// + +//// class C {} +//// const x: number = new C().x; + +verify.codeFix({ + description: "Add index signature for property 'x'", + index: 1, + newFileContent: +`class C { + [x: string]: number; +} +const x: number = new C().x;` +}); diff --git a/tests/cases/fourslash/codeFixAddMissingMember_typeParameter.ts b/tests/cases/fourslash/codeFixAddMissingMember_typeParameter.ts index 51d476220bb..cbf31744b3b 100644 --- a/tests/cases/fourslash/codeFixAddMissingMember_typeParameter.ts +++ b/tests/cases/fourslash/codeFixAddMissingMember_typeParameter.ts @@ -19,7 +19,7 @@ verify.codeFix({ index: 0, newFileContent: `interface I { - bar: any; + bar: number; } function f(t: T): number {