(node, candidates, args, checkMode)
| 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) { |
no test coverage detected