@@ -40412,22 +40412,21 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
40412
40412
}
40413
40413
40414
40414
function checkTupleType(node: TupleTypeNode) {
40415
- const elementTypes = node.elements;
40416
40415
let seenOptionalElement = false;
40417
40416
let seenRestElement = false;
40418
- for (const e of elementTypes ) {
40419
- const flags = getTupleElementFlags(e);
40417
+ for (const e of node.elements ) {
40418
+ let flags = getTupleElementFlags(e);
40420
40419
if (flags & ElementFlags.Variadic) {
40421
40420
const type = getTypeFromTypeNode((e as RestTypeNode | NamedTupleMember).type);
40422
40421
if (!isArrayLikeType(type)) {
40423
40422
error(e, Diagnostics.A_rest_element_type_must_be_an_array_type);
40424
40423
break;
40425
40424
}
40426
40425
if (isArrayType(type) || isTupleType(type) && type.target.combinedFlags & ElementFlags.Rest) {
40427
- seenRestElement = true ;
40426
+ flags |= ElementFlags.Rest ;
40428
40427
}
40429
40428
}
40430
- else if (flags & ElementFlags.Rest) {
40429
+ if (flags & ElementFlags.Rest) {
40431
40430
if (seenRestElement) {
40432
40431
grammarErrorOnNode(e, Diagnostics.A_rest_element_cannot_follow_another_rest_element);
40433
40432
break;
@@ -40441,7 +40440,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
40441
40440
}
40442
40441
seenOptionalElement = true;
40443
40442
}
40444
- else if (seenOptionalElement) {
40443
+ else if (flags & ElementFlags.Required && seenOptionalElement) {
40445
40444
grammarErrorOnNode(e, Diagnostics.A_required_element_cannot_follow_an_optional_element);
40446
40445
break;
40447
40446
}
0 commit comments