@@ -16018,8 +16018,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
16018
16018
return instantiateSignature(signature, createSignatureTypeMapper(signature, typeArguments), /*eraseTypeParameters*/ true);
16019
16019
}
16020
16020
16021
+ function getTypeParametersForMapper(signature: Signature) {
16022
+ return sameMap(signature.typeParameters, tp => tp.mapper ? instantiateType(tp, tp.mapper) : tp);
16023
+ }
16024
+
16021
16025
function createSignatureTypeMapper(signature: Signature, typeArguments: readonly Type[] | undefined): TypeMapper {
16022
- return createTypeMapper(sameMap (signature.typeParameters!, tp => tp.mapper ? instantiateType(tp, tp.mapper) : tp) , typeArguments);
16026
+ return createTypeMapper(getTypeParametersForMapper (signature)! , typeArguments);
16023
16027
}
16024
16028
16025
16029
function getErasedSignature(signature: Signature): Signature {
@@ -34908,7 +34912,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
34908
34912
34909
34913
// Instantiate a generic signature in the context of a non-generic signature (section 3.8.5 in TypeScript spec)
34910
34914
function instantiateSignatureInContextOf(signature: Signature, contextualSignature: Signature, inferenceContext?: InferenceContext, compareTypes?: TypeComparer): Signature {
34911
- const context = createInferenceContext(sameMap (signature.typeParameters!, tp => tp.mapper ? instantiateType(tp, tp.mapper) : tp) , signature, InferenceFlags.None, compareTypes);
34915
+ const context = createInferenceContext(getTypeParametersForMapper (signature)! , signature, InferenceFlags.None, compareTypes);
34912
34916
// We clone the inferenceContext to avoid fixing. For example, when the source signature is <T>(x: T) => T[] and
34913
34917
// the contextual signature is (...args: A) => B, we want to infer the element type of A's constraint (say 'any')
34914
34918
// for T but leave it possible to later infer '[any]' back to A.
0 commit comments