Reintroduce cloneInferredPartOfContext to fix overloaded inferences with returnMappers (#33478)

This commit is contained in:
Wesley Wigham
2019-09-18 13:14:39 -07:00
committed by GitHub
parent 1c20aa0b1a
commit 683e281040
5 changed files with 298 additions and 1 deletions

View File

@@ -15408,6 +15408,13 @@ namespace ts {
};
}
function cloneInferredPartOfContext(context: InferenceContext): InferenceContext | undefined {
const inferences = filter(context.inferences, hasInferenceCandidates);
return inferences.length ?
createInferenceContextWorker(map(inferences, cloneInferenceInfo), context.signature, context.flags, context.compareTypes) :
undefined;
}
function getMapperFromContext<T extends InferenceContext | undefined>(context: T): TypeMapper | T & undefined {
return context && context.mapper;
}
@@ -21465,7 +21472,7 @@ namespace ts {
const returnContext = createInferenceContext(signature.typeParameters!, signature, context.flags);
const returnSourceType = instantiateType(contextualType, outerContext && outerContext.returnMapper);
inferTypes(returnContext.inferences, returnSourceType, inferenceTargetType);
context.returnMapper = some(returnContext.inferences, hasInferenceCandidates) ? getMapperFromContext(returnContext) : undefined;
context.returnMapper = some(returnContext.inferences, hasInferenceCandidates) ? getMapperFromContext(cloneInferredPartOfContext(returnContext)) : undefined;
}
}