MCPcopy Index your code
hub / github.com/nodejs/node / pickLongestCandidateSignature

Function pickLongestCandidateSignature

test/fixtures/snapshot/typescript.js:76378–76397  ·  view source on GitHub ↗
(node, candidates, args, checkMode)

Source from the content-addressed store, hash-verified

76376 return createSymbolWithType(ts.first(sources), type);
76377 }
76378 function pickLongestCandidateSignature(node, candidates, args, checkMode) {
76379 // Pick the longest signature. This way we can get a contextual type for cases like:
76380 // declare function f(a: { xa: number; xb: number; }, b: number);
76381 // f({ |
76382 // Also, use explicitly-supplied type arguments if they are provided, so we can get a contextual signature in cases like:
76383 // declare function f<T>(k: keyof T);
76384 // f<Foo>("
76385 var bestIndex = getLongestCandidateIndex(candidates, apparentArgumentCount === undefined ? args.length : apparentArgumentCount);
76386 var candidate = candidates[bestIndex];
76387 var typeParameters = candidate.typeParameters;
76388 if (!typeParameters) {
76389 return candidate;
76390 }
76391 var typeArgumentNodes = callLikeExpressionMayHaveTypeArguments(node) ? node.typeArguments : undefined;
76392 var instantiated = typeArgumentNodes
76393 ? createSignatureInstantiation(candidate, getTypeArgumentsFromNodes(typeArgumentNodes, typeParameters, ts.isInJSFile(node)))
76394 : inferSignatureInstantiationForOverloadFailure(node, typeParameters, candidate, args, checkMode);
76395 candidates[bestIndex] = instantiated;
76396 return instantiated;
76397 }
76398 function getTypeArgumentsFromNodes(typeArgumentNodes, typeParameters, isJs) {
76399 var typeArguments = typeArgumentNodes.map(getTypeOfNode);
76400 while (typeArguments.length > typeParameters.length) {

Callers 1

Tested by

no test coverage detected