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 {