@@ -13345,12 +13345,23 @@ namespace ts {
13345
13345
return { kind: TypeMapKind.Function, func: t => findIndex(context.inferences, info => info.typeParameter === t) >= index ? unknownType : t };
13346
13346
}
13347
13347
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
+
13348
13356
function combineTypeMappers(mapper1: TypeMapper | undefined, mapper2: TypeMapper): TypeMapper;
13349
13357
function combineTypeMappers(mapper1: TypeMapper, mapper2: TypeMapper | undefined): TypeMapper;
13350
13358
function combineTypeMappers(mapper1: TypeMapper, mapper2: TypeMapper): TypeMapper {
13351
13359
if (!mapper1) return mapper2;
13352
13360
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));
13354
13365
}
13355
13366
13356
13367
function createReplacementMapper(source: Type, target: Type, baseMapper: TypeMapper): TypeMapper {
0 commit comments