From e1b2000e4c351801db23ed0a0df763a7ceee76c9 Mon Sep 17 00:00:00 2001 From: navya9singh Date: Fri, 27 Jan 2023 14:12:36 -0800 Subject: [PATCH] Fix for crash --- src/compiler/checker.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 4765c1aa334..76d1572acb4 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -34271,7 +34271,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { if (pos < paramCount) { return getTypeOfParameter(signature.parameters[pos]); } - if (signatureHasRestParameter(signature)) { + if (signature.parameters.length !== 0 && signatureHasRestParameter(signature)) { // We want to return the value undefined for an out of bounds parameter position, // so we need to check bounds here before calling getIndexedAccessType (which // otherwise would return the type 'undefined'). @@ -34317,7 +34317,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // latter example, the effective rest type is [...string[], boolean]. function getParameterCount(signature: Signature) { const length = signature.parameters.length; - if (signatureHasRestParameter(signature)) { + if (length !== 0 && signatureHasRestParameter(signature)) { const restType = getTypeOfSymbol(signature.parameters[length - 1]); if (isTupleType(restType)) { return length + restType.target.fixedLength - (restType.target.hasRestElement ? 0 : 1); @@ -34363,8 +34363,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function hasEffectiveRestParameter(signature: Signature) { - if (signatureHasRestParameter(signature)) { - const restType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); + const length = signature.parameters.length; + if (length !== 0 && signatureHasRestParameter(signature)) { + const restType = getTypeOfSymbol(signature.parameters[length - 1]); return !isTupleType(restType) || restType.target.hasRestElement; } return false;