@@ -26740,7 +26740,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2674026740 function hasMatchingArgument(expression: CallExpression | NewExpression, reference: Node) {
2674126741 if (expression.arguments) {
2674226742 for (const argument of expression.arguments) {
26743- if (isOrContainsMatchingReference(reference, argument) || optionalChainContainsReference(argument, reference)) {
26743+ if (
26744+ isOrContainsMatchingReference(reference, argument)
26745+ || optionalChainContainsReference(argument, reference)
26746+ || isAccessExpression(argument) && isMatchingReference(reference, argument.expression)
26747+ ) {
2674426748 return true;
2674526749 }
2674626750 }
@@ -28754,10 +28758,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2875428758 }
2875528759
2875628760 function narrowTypeByCallExpression(type: Type, callExpression: CallExpression, assumeTrue: boolean): Type {
28757- const signature = assumeTrue || !isCallChain(callExpression) ? getEffectsSignature(callExpression) : undefined;
28758- const predicate = signature && getTypePredicateOfSignature(signature);
28759- if (predicate && (predicate.kind === TypePredicateKind.This || predicate.kind === TypePredicateKind.Identifier)) {
28760- return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
28761+ if (hasMatchingArgument(callExpression, reference)) {
28762+ const signature = assumeTrue || !isCallChain(callExpression) ? getEffectsSignature(callExpression) : undefined;
28763+ const predicate = signature && getTypePredicateOfSignature(signature);
28764+ if (predicate && (predicate.kind === TypePredicateKind.This || predicate.kind === TypePredicateKind.Identifier)) {
28765+ return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue);
28766+ }
2876128767 }
2876228768 if (containsMissingType(type) && isAccessExpression(reference) && isPropertyAccessExpression(callExpression.expression)) {
2876328769 const callAccess = callExpression.expression;
0 commit comments