Skip to content

Commit 04ee41c

Browse files
committed
fix the other crash
1 parent 10842d4 commit 04ee41c

File tree

4 files changed

+66
-2
lines changed

4 files changed

+66
-2
lines changed

src/compiler/checker.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27419,7 +27419,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2741927419
const impliedArity = constraint.target.fixedLength;
2742027420
if (startLength + impliedArity <= source.target.fixedLength) {
2742127421
inferFromTypes(sliceTupleType(source, startLength, sourceArity - (startLength + impliedArity)), elementTypes[startLength]);
27422-
inferFromTypes(getElementTypeOfSliceOfTupleType(source, startLength + impliedArity, endLength)!, elementTypes[startLength + 1]);
27422+
const restType = getElementTypeOfSliceOfTupleType(source, startLength + impliedArity, endLength);
27423+
if (restType) {
27424+
inferFromTypes(restType, elementTypes[startLength + 1]);
27425+
}
2742327426
}
2742427427
}
2742527428
}
@@ -27435,7 +27438,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2743527438
const startIndex = endIndex - impliedArity;
2743627439
const trailingSlice = createTupleType(getTypeArguments(source).slice(startIndex, endIndex), source.target.elementFlags.slice(startIndex, endIndex), /*readonly*/ false, source.target.labeledElementDeclarations && source.target.labeledElementDeclarations.slice(startIndex, endIndex));
2743727440

27438-
inferFromTypes(getElementTypeOfSliceOfTupleType(source, startLength, endLength + impliedArity)!, elementTypes[startLength]);
27441+
const restType = getElementTypeOfSliceOfTupleType(source, startLength, endLength + impliedArity);
27442+
if (restType) {
27443+
inferFromTypes(restType, elementTypes[startLength]);
27444+
}
2743927445
inferFromTypes(trailingSlice, elementTypes[startLength + 1]);
2744027446
}
2744127447
}

tests/baselines/reference/inferTypesWithFixedTupleExtendsAtVariadicPosition.symbols

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,3 +372,28 @@ type SubTup2TrailingVariadicWithTrailingFixedElements3Test5 = SubTup2TrailingVar
372372
>SubTup2TrailingVariadicWithTrailingFixedElements3Test5 : Symbol(SubTup2TrailingVariadicWithTrailingFixedElements3Test5, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 141, 131))
373373
>SubTup2TrailingVariadicWithTrailingFixedElements3 : Symbol(SubTup2TrailingVariadicWithTrailingFixedElements3, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 128, 125))
374374

375+
// variadic consuming all source elements, nothing left for rest
376+
type SubTup2VariadicTest5 = SubTup2Variadic<[a: 0, b: 1]>;
377+
>SubTup2VariadicTest5 : Symbol(SubTup2VariadicTest5, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 142, 125))
378+
>SubTup2Variadic : Symbol(SubTup2Variadic, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 10, 58))
379+
380+
type SubTup2VariadicAndRestTest4 = SubTup2VariadicAndRest<[a: 0, b: 1]>;
381+
>SubTup2VariadicAndRestTest4 : Symbol(SubTup2VariadicAndRestTest4, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 145, 58))
382+
>SubTup2VariadicAndRest : Symbol(SubTup2VariadicAndRest, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 22, 57))
383+
384+
type SubTup2TrailingVariadicTest5 = SubTup2TrailingVariadic<[b: 1, c: 2]>;
385+
>SubTup2TrailingVariadicTest5 : Symbol(SubTup2TrailingVariadicTest5, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 146, 72))
386+
>SubTup2TrailingVariadic : Symbol(SubTup2TrailingVariadic, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 33, 71))
387+
388+
type SubTup2RestAndTrailingVariadic2Test4 = SubTup2RestAndTrailingVariadic2<[b: 1, c: 2]>;
389+
>SubTup2RestAndTrailingVariadic2Test4 : Symbol(SubTup2RestAndTrailingVariadic2Test4, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 147, 74))
390+
>SubTup2RestAndTrailingVariadic2 : Symbol(SubTup2RestAndTrailingVariadic2, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 45, 73))
391+
392+
type SubTup2VariadicWithLeadingFixedElements3Test6 = SubTup2VariadicWithLeadingFixedElements3<[a: 0, b: 1, c: 2]>;
393+
>SubTup2VariadicWithLeadingFixedElements3Test6 : Symbol(SubTup2VariadicWithLeadingFixedElements3Test6, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 148, 90))
394+
>SubTup2VariadicWithLeadingFixedElements3 : Symbol(SubTup2VariadicWithLeadingFixedElements3, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 85, 107))
395+
396+
type SubTup2TrailingVariadicWithTrailingFixedElements3Test6 = SubTup2TrailingVariadicWithTrailingFixedElements3<[b: 1, c: 2, d: 3]>;
397+
>SubTup2TrailingVariadicWithTrailingFixedElements3Test6 : Symbol(SubTup2TrailingVariadicWithTrailingFixedElements3Test6, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 149, 114))
398+
>SubTup2TrailingVariadicWithTrailingFixedElements3 : Symbol(SubTup2TrailingVariadicWithTrailingFixedElements3, Decl(inferTypesWithFixedTupleExtendsAtVariadicPosition.ts, 128, 125))
399+

tests/baselines/reference/inferTypesWithFixedTupleExtendsAtVariadicPosition.types

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,3 +308,28 @@ type SubTup2TrailingVariadicWithTrailingFixedElements3Test5 = SubTup2TrailingVar
308308
>SubTup2TrailingVariadicWithTrailingFixedElements3Test5 : never
309309
> : ^^^^^
310310

311+
// variadic consuming all source elements, nothing left for rest
312+
type SubTup2VariadicTest5 = SubTup2Variadic<[a: 0, b: 1]>;
313+
>SubTup2VariadicTest5 : [a: 0, b: 1]
314+
> : ^^^^^^^^^^^^
315+
316+
type SubTup2VariadicAndRestTest4 = SubTup2VariadicAndRest<[a: 0, b: 1]>;
317+
>SubTup2VariadicAndRestTest4 : [a: 0, b: 1, unknown]
318+
> : ^^^^^^^^^^^^^^^^^^^^^
319+
320+
type SubTup2TrailingVariadicTest5 = SubTup2TrailingVariadic<[b: 1, c: 2]>;
321+
>SubTup2TrailingVariadicTest5 : [b: 1, c: 2]
322+
> : ^^^^^^^^^^^^
323+
324+
type SubTup2RestAndTrailingVariadic2Test4 = SubTup2RestAndTrailingVariadic2<[b: 1, c: 2]>;
325+
>SubTup2RestAndTrailingVariadic2Test4 : [unknown, b: 1, c: 2]
326+
> : ^^^^^^^^^^^^^^^^^^^^^
327+
328+
type SubTup2VariadicWithLeadingFixedElements3Test6 = SubTup2VariadicWithLeadingFixedElements3<[a: 0, b: 1, c: 2]>;
329+
>SubTup2VariadicWithLeadingFixedElements3Test6 : [[b: 1, c: 2], unknown]
330+
> : ^^^^^^^^^^^^^^^^^^^^^^^
331+
332+
type SubTup2TrailingVariadicWithTrailingFixedElements3Test6 = SubTup2TrailingVariadicWithTrailingFixedElements3<[b: 1, c: 2, d: 3]>;
333+
>SubTup2TrailingVariadicWithTrailingFixedElements3Test6 : [unknown, [b: 1, c: 2]]
334+
> : ^^^^^^^^^^^^^^^^^^^^^^^
335+

tests/cases/compiler/inferTypesWithFixedTupleExtendsAtVariadicPosition.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,11 @@ type SubTup2TrailingVariadicWithTrailingFixedElements3Test2 = SubTup2TrailingVar
145145
type SubTup2TrailingVariadicWithTrailingFixedElements3Test3 = SubTup2TrailingVariadicWithTrailingFixedElements3<[...a: 0[], b: 1, c: 2]>;
146146
type SubTup2TrailingVariadicWithTrailingFixedElements3Test4 = SubTup2TrailingVariadicWithTrailingFixedElements3<[...a: 0[], b: 1]>;
147147
type SubTup2TrailingVariadicWithTrailingFixedElements3Test5 = SubTup2TrailingVariadicWithTrailingFixedElements3<[...a: 0[]]>;
148+
149+
// variadic consuming all source elements, nothing left for rest
150+
type SubTup2VariadicTest5 = SubTup2Variadic<[a: 0, b: 1]>;
151+
type SubTup2VariadicAndRestTest4 = SubTup2VariadicAndRest<[a: 0, b: 1]>;
152+
type SubTup2TrailingVariadicTest5 = SubTup2TrailingVariadic<[b: 1, c: 2]>;
153+
type SubTup2RestAndTrailingVariadic2Test4 = SubTup2RestAndTrailingVariadic2<[b: 1, c: 2]>;
154+
type SubTup2VariadicWithLeadingFixedElements3Test6 = SubTup2VariadicWithLeadingFixedElements3<[a: 0, b: 1, c: 2]>;
155+
type SubTup2TrailingVariadicWithTrailingFixedElements3Test6 = SubTup2TrailingVariadicWithTrailingFixedElements3<[b: 1, c: 2, d: 3]>;

0 commit comments

Comments
 (0)