mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-15 12:51:30 -05:00
show completion in destructured parameter if containing function was contextually typed
This commit is contained in:
@@ -3504,7 +3504,11 @@ namespace ts {
|
||||
// We don't want to complete using the type acquired by the shape
|
||||
// of the binding pattern; we are only interested in types acquired
|
||||
// through type declaration or inference.
|
||||
if (rootDeclaration.initializer || rootDeclaration.type) {
|
||||
// Also proceed if rootDeclaration is parameter and if its containing function expression\arrow function is contextually typed -
|
||||
// type of parameter will flow in from the contextual type of the function
|
||||
if (rootDeclaration.initializer ||
|
||||
rootDeclaration.type ||
|
||||
(rootDeclaration.kind === SyntaxKind.Parameter && isExpression(rootDeclaration.parent) && typeChecker.getContextualType(<Expression>rootDeclaration.parent))) {
|
||||
typeForObject = typeChecker.getTypeAtLocation(objectLikeContainer);
|
||||
existingMembers = (<BindingPattern>objectLikeContainer).elements;
|
||||
}
|
||||
|
||||
15
tests/cases/fourslash/objectLiteralBindingInParameter.ts
Normal file
15
tests/cases/fourslash/objectLiteralBindingInParameter.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
/// <reference path="fourslash.ts"/>
|
||||
|
||||
////interface I { x1: number; x2: string }
|
||||
////function f(cb: (ev: I) => any) { }
|
||||
////f(({/*1*/}) => 0);
|
||||
|
||||
////[<I>null].reduce(({/*2*/}, b) => b);
|
||||
|
||||
goTo.marker("1");
|
||||
verify.completionListContains("x1");
|
||||
verify.completionListContains("x2");
|
||||
|
||||
goTo.marker("2");
|
||||
verify.completionListContains("x1");
|
||||
verify.completionListContains("x2");
|
||||
Reference in New Issue
Block a user