Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 979bc6a

Browse files
committedFeb 2, 2020
Flatten combined type mappers
1 parent 63338f9 commit 979bc6a

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed
 

Diff for: ‎src/compiler/checker.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)
Please sign in to comment.