Skip to content

Commit 204d9b2

Browse files
committed
Avoid using temporary array for getExpandedParameters
1 parent 8cc216a commit 204d9b2

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/compiler/checker.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7275,7 +7275,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
72757275
typeParameters = signature.typeParameters && signature.typeParameters.map(parameter => typeParameterToDeclaration(parameter, context));
72767276
}
72777277

7278-
const expandedParams = getExpandedParameters(signature, /*skipUnionExpanding*/ true)[0];
7278+
const expandedParams = getExpandedParameters(signature, /*skipUnionExpanding*/ true);
72797279

72807280
// For regular function/method declarations, the enclosing declaration will already be signature.declaration,
72817281
// so this is a no-op, but for arrow functions and function expressions, the enclosing declaration will be
@@ -12604,18 +12604,21 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1260412604
return result;
1260512605
}
1260612606

12607-
function getExpandedParameters(sig: Signature, skipUnionExpanding?: boolean): readonly (readonly Symbol[])[] {
12607+
function getExpandedParameters(sig: Signature): readonly (readonly Symbol[])[]
12608+
function getExpandedParameters(sig: Signature, skipUnionExpanding: true): readonly Symbol[]
12609+
function getExpandedParameters(sig: Signature, skipUnionExpanding?: boolean): readonly Symbol[] | readonly (readonly Symbol[])[] {
1260812610
if (signatureHasRestParameter(sig)) {
1260912611
const restIndex = sig.parameters.length - 1;
1261012612
const restType = getTypeOfSymbol(sig.parameters[restIndex]);
1261112613
if (isTupleType(restType)) {
12612-
return [expandSignatureParametersWithTupleMembers(restType, restIndex)];
12614+
const expanded = expandSignatureParametersWithTupleMembers(restType, restIndex);
12615+
return skipUnionExpanding ? expanded : [expanded]
1261312616
}
1261412617
else if (!skipUnionExpanding && restType.flags & TypeFlags.Union && every((restType as UnionType).types, isTupleType)) {
1261512618
return map((restType as UnionType).types, t => expandSignatureParametersWithTupleMembers(t as TupleTypeReference, restIndex));
1261612619
}
1261712620
}
12618-
return [sig.parameters];
12621+
return skipUnionExpanding ? sig.parameters : [sig.parameters];
1261912622

1262012623
function expandSignatureParametersWithTupleMembers(restType: TupleTypeReference, restIndex: number) {
1262112624
const elementTypes = getTypeArguments(restType);

0 commit comments

Comments
 (0)