Skip to content

Commit 70715ea

Browse files
committed
Fix rest element error reporting
1 parent af142b3 commit 70715ea

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

src/compiler/checker.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -40412,22 +40412,21 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4041240412
}
4041340413

4041440414
function checkTupleType(node: TupleTypeNode) {
40415-
const elementTypes = node.elements;
4041640415
let seenOptionalElement = false;
4041740416
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);
4042040419
if (flags & ElementFlags.Variadic) {
4042140420
const type = getTypeFromTypeNode((e as RestTypeNode | NamedTupleMember).type);
4042240421
if (!isArrayLikeType(type)) {
4042340422
error(e, Diagnostics.A_rest_element_type_must_be_an_array_type);
4042440423
break;
4042540424
}
4042640425
if (isArrayType(type) || isTupleType(type) && type.target.combinedFlags & ElementFlags.Rest) {
40427-
seenRestElement = true;
40426+
flags |= ElementFlags.Rest;
4042840427
}
4042940428
}
40430-
else if (flags & ElementFlags.Rest) {
40429+
if (flags & ElementFlags.Rest) {
4043140430
if (seenRestElement) {
4043240431
grammarErrorOnNode(e, Diagnostics.A_rest_element_cannot_follow_another_rest_element);
4043340432
break;
@@ -40441,7 +40440,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4044140440
}
4044240441
seenOptionalElement = true;
4044340442
}
40444-
else if (seenOptionalElement) {
40443+
else if (flags & ElementFlags.Required && seenOptionalElement) {
4044540444
grammarErrorOnNode(e, Diagnostics.A_required_element_cannot_follow_an_optional_element);
4044640445
break;
4044740446
}

0 commit comments

Comments
 (0)