Skip to content

Commit aa20d87

Browse files
committed
fix(transformer): Properly cover overloads where no signatures declare arguments
1 parent b4d2060 commit aa20d87

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

src/transformer/descriptor/method/method.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,15 @@ function CreateUnionTypeOfEquality(signatureType: ts.TypeNode | undefined, prima
9090
}
9191

9292
function ResolveParameterBranch(declarations: ts.ParameterDeclaration[], allDeclarations: ts.ParameterDeclaration[], returnValue: ts.Expression, elseBranch: ts.Statement): ts.Statement {
93-
const [firstDeclaration, ...remainingDeclarations]: ts.ParameterDeclaration[] = declarations;
93+
const [firstDeclaration, ...remainingDeclarations]: Array<ts.ParameterDeclaration | undefined> = declarations;
9494

9595
const condition: ts.Expression = remainingDeclarations.reduce(
9696
(prevStatement: ts.Expression, declaration: ts.ParameterDeclaration, index: number) =>
9797
ts.createLogicalAnd(
9898
prevStatement,
9999
CreateUnionTypeOfEquality(declaration.type, allDeclarations[index + 1]),
100100
),
101-
CreateUnionTypeOfEquality(firstDeclaration.type, allDeclarations[0]),
101+
CreateUnionTypeOfEquality(firstDeclaration?.type, allDeclarations[0]),
102102
);
103103

104104
return ts.createIf(condition, ts.createReturn(returnValue), elseBranch);
@@ -107,16 +107,17 @@ function ResolveParameterBranch(declarations: ts.ParameterDeclaration[], allDecl
107107
export function ResolveSignatureElseBranch(signatures: MethodSignature[], longestParameterList: ts.ParameterDeclaration[]): ts.Statement {
108108
const transformOverloadsOption: TsAutoMockOverloadOptions = GetTsAutoMockOverloadOptions();
109109

110-
const [signature, ...remainingSignatures]: MethodSignature[] = signatures.filter((_: unknown, i: number) => transformOverloadsOption || i === 0);
110+
const [signature, ...remainingSignatures]: MethodSignature[] = signatures.filter((_: unknown, notFirst: number) => transformOverloadsOption || !notFirst);
111111

112-
if (remainingSignatures.length) {
113-
const elseBranch: ts.Statement = ResolveSignatureElseBranch(remainingSignatures, longestParameterList);
114-
115-
const currentParameters: ts.ParameterDeclaration[] = signature.parameters || [];
116-
return ResolveParameterBranch(currentParameters, longestParameterList, signature.returnValue, elseBranch);
117-
} else {
112+
const indistinctSignatures: boolean = signatures.every((sig: MethodSignature) => !sig.parameters?.length);
113+
if (!remainingSignatures.length || indistinctSignatures) {
118114
return ts.createReturn(signature.returnValue);
119115
}
116+
117+
const elseBranch: ts.Statement = ResolveSignatureElseBranch(remainingSignatures, longestParameterList);
118+
119+
const currentParameters: ts.ParameterDeclaration[] = signature.parameters || [];
120+
return ResolveParameterBranch(currentParameters, longestParameterList, signature.returnValue, elseBranch);
120121
}
121122

122123
function CreateProviderGetMethod(): ts.PropertyAccessExpression {

0 commit comments

Comments
 (0)