fix(41868): Infer parameter from usage does not work on arrow functions that are a PropertyDeclaration of a Class (#41869)

This commit is contained in:
Léo Meira Vital 2020-12-14 22:08:52 -03:00 committed by GitHub
parent 9b2eab9da2
commit 4a9e2be386
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 1 deletions

View File

@ -447,7 +447,7 @@ namespace ts.codefix {
case SyntaxKind.ArrowFunction:
case SyntaxKind.FunctionExpression:
const parent = containingFunction.parent;
searchToken = isVariableDeclaration(parent) && isIdentifier(parent.name) ?
searchToken = (isVariableDeclaration(parent) || isPropertyDeclaration(parent)) && isIdentifier(parent.name) ?
parent.name :
containingFunction.name;
break;

View File

@ -0,0 +1,52 @@
/// <reference path='fourslash.ts' />
// @noImplicitAny: true
// @Filename: test.ts
////class MyClass {
//// bar = (a, b, c, d, e, f) => {};
////};
////
////interface I {
//// x: number;
////}
////
////enum E {
//// X
////}
////
////function foo(x: MyClass) {
//// const a = 1;
//// const b = "";
//// const c = { x: 1, y: 1 };
//// const d = [1, 2, 3];
//// const e: I = { x: 1 };
//// const f: E = E.X;
//// x.bar(a, b, c, d, e, f);
////}
verify.codeFixAll({
fixId: "inferFromUsage",
fixAllDescription: "Infer all types from usage",
newFileContent:
`class MyClass {
bar = (a: number, b: string, c: { x: number; y: number; }, d: number[], e: I, f: E) => {};
};
interface I {
x: number;
}
enum E {
X
}
function foo(x: MyClass) {
const a = 1;
const b = "";
const c = { x: 1, y: 1 };
const d = [1, 2, 3];
const e: I = { x: 1 };
const f: E = E.X;
x.bar(a, b, c, d, e, f);
}`,
});