@@ -20217,19 +20217,25 @@ namespace ts {
20217
20217
return checkPropertyAccessExpressionOrQualifiedName(node, node.left, node.right);
20218
20218
}
20219
20219
20220
+ function isMethodAccessForCall(node: Node) {
20221
+ while (node.parent.kind === SyntaxKind.ParenthesizedExpression) {
20222
+ node = node.parent;
20223
+ }
20224
+ return isCallOrNewExpression(node.parent) && node.parent.expression === node;
20225
+ }
20226
+
20220
20227
function checkPropertyAccessExpressionOrQualifiedName(node: PropertyAccessExpression | QualifiedName, left: Expression | QualifiedName, right: Identifier) {
20221
20228
let propType: Type;
20222
20229
const leftType = checkNonNullExpression(left);
20223
20230
const parentSymbol = getNodeLinks(left).resolvedSymbol;
20224
- // We widen array literals to get type any[] instead of undefined[] in non-strict mode
20225
- const apparentType = getApparentType(isEmptyArrayLiteralType(leftType ) ? getWidenedType(leftType) : leftType);
20231
+ const assignmentKind = getAssignmentTargetKind(node);
20232
+ const apparentType = getApparentType(assignmentKind !== AssignmentKind.None || isMethodAccessForCall(node ) ? getWidenedType(leftType) : leftType);
20226
20233
if (isTypeAny(apparentType) || apparentType === silentNeverType) {
20227
20234
if (isIdentifier(left) && parentSymbol) {
20228
20235
markAliasReferenced(parentSymbol, node);
20229
20236
}
20230
20237
return apparentType;
20231
20238
}
20232
- const assignmentKind = getAssignmentTargetKind(node);
20233
20239
const prop = getPropertyOfType(apparentType, right.escapedText);
20234
20240
if (isIdentifier(left) && parentSymbol && !(prop && isConstEnumOrConstEnumOnlyModule(prop))) {
20235
20241
markAliasReferenced(parentSymbol, node);
@@ -20623,7 +20629,8 @@ namespace ts {
20623
20629
}
20624
20630
20625
20631
function checkIndexedAccess(node: ElementAccessExpression): Type {
20626
- const objectType = checkNonNullExpression(node.expression);
20632
+ const exprType = checkNonNullExpression(node.expression);
20633
+ const objectType = getAssignmentTargetKind(node) !== AssignmentKind.None || isMethodAccessForCall(node.parent) ? getWidenedType(exprType) : exprType;
20627
20634
20628
20635
const indexExpression = node.argumentExpression;
20629
20636
if (!indexExpression) {
0 commit comments