@@ -24443,7 +24443,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
24443
24443
else {
24444
24444
const middleLength = targetArity - startLength - endLength;
24445
24445
if (middleLength === 2) {
24446
- if (elementFlags[startLength] & elementFlags[startLength + 1] & ElementFlags.Variadic && isTupleType(source) ) {
24446
+ if (elementFlags[startLength] & elementFlags[startLength + 1] & ElementFlags.Variadic) {
24447
24447
// Middle of target is [...T, ...U] and source is tuple type
24448
24448
const targetInfo = getInferenceInfoForType(elementTypes[startLength]);
24449
24449
if (targetInfo && targetInfo.impliedArity !== undefined) {
@@ -24463,7 +24463,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
24463
24463
inferFromTypes(getElementTypeOfSliceOfTupleType(source, startLength + impliedArity, endLength)!, elementTypes[startLength + 1]);
24464
24464
}
24465
24465
}
24466
- else if (elementFlags[startLength] & ElementFlags.Rest && elementFlags[startLength + 1] & ElementFlags.Variadic && isTupleType(source) ) {
24466
+ else if (elementFlags[startLength] & ElementFlags.Rest && elementFlags[startLength + 1] & ElementFlags.Variadic) {
24467
24467
// Middle of target is [...rest, ...T] and source is tuple type
24468
24468
// if T is constrained by a fixed-size tuple we might be able to use its arity to infer T
24469
24469
const param = getInferenceInfoForType(elementTypes[startLength + 1])?.typeParameter;
@@ -24484,12 +24484,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
24484
24484
// Middle of target is exactly one variadic element. Infer the slice between the fixed parts in the source.
24485
24485
// If target ends in optional element(s), make a lower priority a speculative inference.
24486
24486
const endsInOptional = target.target.elementFlags[targetArity - 1] & ElementFlags.Optional;
24487
- const sourceSlice = isTupleType(source) ? sliceTupleType(source, startLength, endLength) : createArrayType(getTypeArguments(source)[0] );
24487
+ const sourceSlice = sliceTupleType(source, startLength, endLength);
24488
24488
inferWithPriority(sourceSlice, elementTypes[startLength], endsInOptional ? InferencePriority.SpeculativeTuple : 0);
24489
24489
}
24490
24490
else if (middleLength === 1 && elementFlags[startLength] & ElementFlags.Rest) {
24491
24491
// Middle of target is exactly one rest element. If middle of source is not empty, infer union of middle element types.
24492
- const restType = isTupleType(source) ? getElementTypeOfSliceOfTupleType(source, startLength, endLength) : getTypeArguments(source)[0] ;
24492
+ const restType = getElementTypeOfSliceOfTupleType(source, startLength, endLength);
24493
24493
if (restType) {
24494
24494
inferFromTypes(restType, elementTypes[startLength]);
24495
24495
}
0 commit comments