@@ -21213,14 +21213,14 @@ namespace ts {
2121321213 function getContextualTypeForArgumentAtIndex(callTarget: CallLikeExpression, argIndex: number, contextFlags?: ContextFlags): Type {
2121421214 // If we're already in the process of resolving the given signature, don't resolve again as
2121521215 // that could cause infinite recursion. Instead, return anySignature.
21216- const signature = getNodeLinks(callTarget).resolvedSignature === resolvingSignature ? resolvingSignature : getResolvedSignature(callTarget);
21216+ let signature = getNodeLinks(callTarget).resolvedSignature === resolvingSignature ? resolvingSignature : getResolvedSignature(callTarget);
21217+ if (contextFlags && contextFlags & ContextFlags.BaseConstraint && signature.target && !hasTypeArguments(callTarget)) {
21218+ signature = getBaseSignature(signature.target);
21219+ }
21220+
2121721221 if (isJsxOpeningLikeElement(callTarget) && argIndex === 0) {
2121821222 return getEffectiveFirstArgumentForJsxSignature(signature, callTarget);
2121921223 }
21220- if (contextFlags && contextFlags & ContextFlags.BaseConstraint && signature.target && !hasTypeArguments(callTarget)) {
21221- const baseSignature = getBaseSignature(signature.target);
21222- return getTypeAtPosition(baseSignature, argIndex);
21223- }
2122421224 return getTypeAtPosition(signature, argIndex);
2122521225 }
2122621226
@@ -21645,7 +21645,7 @@ namespace ts {
2164521645 return getContextualTypeForJsxAttribute(<JsxAttribute | JsxSpreadAttribute>parent);
2164621646 case SyntaxKind.JsxOpeningElement:
2164721647 case SyntaxKind.JsxSelfClosingElement:
21648- return getContextualJsxElementAttributesType(<JsxOpeningLikeElement>parent);
21648+ return getContextualJsxElementAttributesType(<JsxOpeningLikeElement>parent, contextFlags );
2164921649 }
2165021650 return undefined;
2165121651 }
@@ -21655,18 +21655,20 @@ namespace ts {
2165521655 return ancestor && ancestor.inferenceContext!;
2165621656 }
2165721657
21658- function getContextualJsxElementAttributesType(node: JsxOpeningLikeElement) {
21659- if (isJsxOpeningElement(node) && node.parent.contextualType) {
21658+ function getContextualJsxElementAttributesType(node: JsxOpeningLikeElement, contextFlags?: ContextFlags ) {
21659+ if (isJsxOpeningElement(node) && node.parent.contextualType && contextFlags !== ContextFlags.BaseConstraint ) {
2166021660 // Contextually applied type is moved from attributes up to the outer jsx attributes so when walking up from the children they get hit
2166121661 // _However_ to hit them from the _attributes_ we must look for them here; otherwise we'll used the declared type
2166221662 // (as below) instead!
2166321663 return node.parent.contextualType;
2166421664 }
21665- return getContextualTypeForArgumentAtIndex(node, 0);
21665+ return getContextualTypeForArgumentAtIndex(node, 0, contextFlags );
2166621666 }
2166721667
2166821668 function getEffectiveFirstArgumentForJsxSignature(signature: Signature, node: JsxOpeningLikeElement) {
21669- return getJsxReferenceKind(node) !== JsxReferenceKind.Component ? getJsxPropsTypeFromCallSignature(signature, node) : getJsxPropsTypeFromClassType(signature, node);
21669+ return getJsxReferenceKind(node) !== JsxReferenceKind.Component
21670+ ? getJsxPropsTypeFromCallSignature(signature, node)
21671+ : getJsxPropsTypeFromClassType(signature, node);
2167021672 }
2167121673
2167221674 function getJsxPropsTypeFromCallSignature(sig: Signature, context: JsxOpeningLikeElement) {
0 commit comments