From fca46bb7061ff5f8c6875e589faf8a8b35ef720c Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Tue, 26 Mar 2019 07:00:19 -0700 Subject: [PATCH] Compute per-element contextual type in getSpreadArgumentType --- src/compiler/checker.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 26727e82c63..2fd72ed40ef 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -20264,15 +20264,15 @@ namespace ts { getArrayifiedType(checkExpressionWithContextualType((arg).expression, restType, context, CheckMode.Normal)); } } - const contextualType = getIndexedAccessType(restType, numberType); - const hasPrimitiveContextualType = maybeTypeOfKind(contextualType, TypeFlags.Primitive | TypeFlags.Index); const types = []; let spreadIndex = -1; for (let i = index; i < argCount; i++) { + const contextualType = getIndexedAccessType(restType, getLiteralType(i - index)); const argType = checkExpressionWithContextualType(args[i], contextualType, context, CheckMode.Normal); if (spreadIndex < 0 && isSpreadArgument(args[i])) { spreadIndex = i - index; } + const hasPrimitiveContextualType = maybeTypeOfKind(contextualType, TypeFlags.Primitive | TypeFlags.Index); types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType)); } return spreadIndex < 0 ?