@@ -13345,12 +13345,23 @@ namespace ts {
1334513345 return { kind: TypeMapKind.Function, func: t => findIndex(context.inferences, info => info.typeParameter === t) >= index ? unknownType : t };
1334613346 }
1334713347
13348+ function getTypeMapperSources(mapper: TypeMapper) {
13349+ return mapper.kind === TypeMapKind.Single ? [mapper.source] : mapper.kind === TypeMapKind.Multiple ? mapper.sources : emptyArray;
13350+ }
13351+
13352+ function getTypeMapperTargets(mapper: TypeMapper) {
13353+ return mapper.kind === TypeMapKind.Single ? [mapper.target] : mapper.kind === TypeMapKind.Multiple ? mapper.targets : emptyArray;
13354+ }
13355+
1334813356 function combineTypeMappers(mapper1: TypeMapper | undefined, mapper2: TypeMapper): TypeMapper;
1334913357 function combineTypeMappers(mapper1: TypeMapper, mapper2: TypeMapper | undefined): TypeMapper;
1335013358 function combineTypeMappers(mapper1: TypeMapper, mapper2: TypeMapper): TypeMapper {
1335113359 if (!mapper1) return mapper2;
1335213360 if (!mapper2) return mapper1;
13353- return makeFunctionTypeMapper(t => instantiateType(getMappedType(t, mapper1), mapper2));
13361+ return mapper1.kind !== TypeMapKind.Function && mapper2.kind !== TypeMapKind.Function ?
13362+ createTypeMapper(concatenate(getTypeMapperSources(mapper1), getTypeMapperSources(mapper2)),
13363+ concatenate(map(getTypeMapperTargets(mapper1), t => instantiateType(t, mapper2)), getTypeMapperTargets(mapper2))) :
13364+ makeFunctionTypeMapper(t => instantiateType(getMappedType(t, mapper1), mapper2));
1335413365 }
1335513366
1335613367 function createReplacementMapper(source: Type, target: Type, baseMapper: TypeMapper): TypeMapper {
0 commit comments