(genericType, usageType, typeParameter)
| 157432 | return builtinConstructors[type.symbol.escapedName](combineTypes(types)); |
| 157433 | } |
| 157434 | function inferTypeParameters(genericType, usageType, typeParameter) { |
| 157435 | if (genericType === typeParameter) { |
| 157436 | return [usageType]; |
| 157437 | } |
| 157438 | else if (genericType.flags & 3145728 /* TypeFlags.UnionOrIntersection */) { |
| 157439 | return ts.flatMap(genericType.types, function (t) { return inferTypeParameters(t, usageType, typeParameter); }); |
| 157440 | } |
| 157441 | else if (ts.getObjectFlags(genericType) & 4 /* ObjectFlags.Reference */ && ts.getObjectFlags(usageType) & 4 /* ObjectFlags.Reference */) { |
| 157442 | // this is wrong because we need a reference to the targetType to, so we can check that it's also a reference |
| 157443 | var genericArgs = checker.getTypeArguments(genericType); |
| 157444 | var usageArgs = checker.getTypeArguments(usageType); |
| 157445 | var types = []; |
| 157446 | if (genericArgs && usageArgs) { |
| 157447 | for (var i = 0; i < genericArgs.length; i++) { |
| 157448 | if (usageArgs[i]) { |
| 157449 | types.push.apply(types, inferTypeParameters(genericArgs[i], usageArgs[i], typeParameter)); |
| 157450 | } |
| 157451 | } |
| 157452 | } |
| 157453 | return types; |
| 157454 | } |
| 157455 | var genericSigs = checker.getSignaturesOfType(genericType, 0 /* SignatureKind.Call */); |
| 157456 | var usageSigs = checker.getSignaturesOfType(usageType, 0 /* SignatureKind.Call */); |
| 157457 | if (genericSigs.length === 1 && usageSigs.length === 1) { |
| 157458 | return inferFromSignatures(genericSigs[0], usageSigs[0], typeParameter); |
| 157459 | } |
| 157460 | return []; |
| 157461 | } |
| 157462 | function inferFromSignatures(genericSig, usageSig, typeParameter) { |
| 157463 | var types = []; |
| 157464 | for (var i = 0; i < genericSig.parameters.length; i++) { |
no test coverage detected