mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-14 19:16:17 -06:00
Improve arity errors for all calls
Not just ones with a single call signature. This is pretty great!
This commit is contained in:
parent
e5e833e53e
commit
35a9be3b6c
@ -15369,28 +15369,33 @@ namespace ts {
|
||||
reportNoCommonSupertypeError(inferenceCandidates, (<JsxOpeningLikeElement>node).tagName || (<CallExpression>node).expression || (<TaggedTemplateExpression>node).tag, diagnosticChainHead);
|
||||
}
|
||||
}
|
||||
else if (typeArguments && every(signatures, sig => length(sig.typeParameters) !== typeArguments.length)) {
|
||||
let min = Number.POSITIVE_INFINITY;
|
||||
let max = Number.NEGATIVE_INFINITY;
|
||||
for (const sig of signatures) {
|
||||
min = Math.min(min, getMinTypeArgumentCount(sig.typeParameters));
|
||||
max = Math.max(max, length(sig.typeParameters));
|
||||
}
|
||||
const paramMessage = max > min ? `${min}-${max}` : min.toString();
|
||||
reportError(Diagnostics.Expected_0_type_arguments_but_got_1, paramMessage, typeArguments.length.toString());
|
||||
}
|
||||
else if (args) {
|
||||
const argMessage = getSpreadArgumentIndex(args) > -1 ?
|
||||
"a minimum of " + (args.length - 1) :
|
||||
args.length.toString();
|
||||
let min = Number.POSITIVE_INFINITY;
|
||||
let max = Number.NEGATIVE_INFINITY;
|
||||
for (const sig of signatures) {
|
||||
min = Math.min(min, sig.minArgumentCount);
|
||||
max = Math.max(max, sig.parameters.length);
|
||||
}
|
||||
const paramMessage = some(signatures, sig => sig.hasRestParameter) ? "at least " + min :
|
||||
min < max ? `${min}-${max}` :
|
||||
min.toString();
|
||||
reportError(Diagnostics.Expected_0_arguments_but_got_1, paramMessage, argMessage);
|
||||
}
|
||||
else {
|
||||
if (signatures.length === 1) {
|
||||
if (typeArguments && typeArguments.length !== length(signatures[0].typeParameters)) {
|
||||
const minTypeArgumentCount = getMinTypeArgumentCount(signatures[0].typeParameters);
|
||||
const paramMessage = length(signatures[0].typeParameters) > minTypeArgumentCount ?
|
||||
`${minTypeArgumentCount}-${length(signatures[0].typeParameters)}` :
|
||||
minTypeArgumentCount.toString();
|
||||
reportError(Diagnostics.Expected_0_type_arguments_but_got_1, paramMessage, typeArguments.length.toString());
|
||||
}
|
||||
else {
|
||||
const argMessage = getSpreadArgumentIndex(args) > -1 ?
|
||||
"a minimum of " + (args.length - 1) :
|
||||
args.length.toString();
|
||||
const paramMessage = signatures[0].hasRestParameter ? "at least " + signatures[0].minArgumentCount :
|
||||
signatures[0].minArgumentCount < signatures[0].parameters.length ? `${signatures[0].minArgumentCount}-${signatures[0].parameters.length}` :
|
||||
signatures[0].minArgumentCount.toString();
|
||||
reportError(Diagnostics.Expected_0_arguments_but_got_1, paramMessage, argMessage);
|
||||
}
|
||||
}
|
||||
else {
|
||||
reportError(Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
|
||||
}
|
||||
reportError(Diagnostics.Supplied_parameters_do_not_match_any_signature_of_call_target);
|
||||
}
|
||||
|
||||
// No signature was applicable. We have already reported the errors for the invalid signature.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user