Fixed parenthesized array literal expressions spread in calls not being tupleized (#54623)

This commit is contained in:
Mateusz Burzyński
2023-06-29 19:15:19 +02:00
committed by GitHub
parent dd3e81a675
commit 18e19492be
21 changed files with 424 additions and 210 deletions

View File

@@ -29965,6 +29965,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
(node.kind === SyntaxKind.BinaryExpression && (node as BinaryExpression).operatorToken.kind === SyntaxKind.EqualsToken);
}
function isSpreadIntoCallOrNew(node: ArrayLiteralExpression) {
const parent = walkUpParenthesizedExpressions(node.parent);
return isSpreadElement(parent) && isCallOrNewExpression(parent.parent);
}
function checkArrayLiteral(node: ArrayLiteralExpression, checkMode: CheckMode | undefined, forceTuple: boolean | undefined): Type {
const elements = node.elements;
const elementCount = elements.length;
@@ -29972,10 +29977,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
const elementFlags: ElementFlags[] = [];
pushCachedContextualType(node);
const inDestructuringPattern = isAssignmentTarget(node);
const isSpreadIntoCallOrNew = isSpreadElement(node.parent) && isCallOrNewExpression(node.parent.parent);
const inConstContext = isSpreadIntoCallOrNew || isConstContext(node);
const inConstContext = isConstContext(node);
const contextualType = getApparentTypeOfContextualType(node, /*contextFlags*/ undefined);
const inTupleContext = isSpreadIntoCallOrNew || !!contextualType && someType(contextualType, isTupleLikeType);
const inTupleContext = isSpreadIntoCallOrNew(node) || !!contextualType && someType(contextualType, isTupleLikeType);
let hasOmittedExpression = false;
for (let i = 0; i < elementCount; i++) {
const e = elements[i];