@@ -9639,7 +9639,7 @@ namespace ts {
9639
9639
// Create a mapper from T to the current iteration type constituent. Then, if the
9640
9640
// mapped type is itself an instantiated type, combine the iteration mapper with the
9641
9641
// instantiation mapper.
9642
- const templateMapper = combineTypeMappers (type.mapper, createTypeMapper([ typeParameter], [t]) );
9642
+ const templateMapper = addTypeMapping (type.mapper, typeParameter, t );
9643
9643
// If the current iteration type constituent is a string literal type, create a property.
9644
9644
// Otherwise, for type string create a string index signature.
9645
9645
if (isTypeUsableAsPropertyName(t)) {
@@ -13606,6 +13606,12 @@ namespace ts {
13606
13606
return !mapper1 ? mapper2 : !mapper2 ? mapper1 : makeCompositeTypeMapper(mapper1, mapper2);
13607
13607
}
13608
13608
13609
+ function addTypeMapping(mapper: TypeMapper | undefined, source: TypeParameter, target: Type) {
13610
+ return mapper && mapper.kind === TypeMapKind.Simple && mapper.source2 === mapper.target2 ?
13611
+ makeSimpleTypeMapper(mapper.source1, mapper.target1, source, target) :
13612
+ combineTypeMappers(mapper, makeUnaryTypeMapper(source, target));
13613
+ }
13614
+
13609
13615
function createReplacementMapper(source: Type, target: Type, baseMapper: TypeMapper): TypeMapper {
13610
13616
switch (baseMapper.kind) {
13611
13617
case TypeMapKind.Simple:
@@ -13845,7 +13851,7 @@ namespace ts {
13845
13851
}
13846
13852
13847
13853
function instantiateMappedTypeTemplate(type: MappedType, key: Type, isOptional: boolean, mapper: TypeMapper) {
13848
- const templateMapper = combineTypeMappers (mapper, createTypeMapper([ getTypeParameterFromMappedType(type)], [ key]) );
13854
+ const templateMapper = addTypeMapping (mapper, getTypeParameterFromMappedType(type), key);
13849
13855
const propType = instantiateType(getTemplateTypeFromMappedType(<MappedType>type.target || type), templateMapper);
13850
13856
const modifiers = getMappedTypeModifiers(type);
13851
13857
return strictNullChecks && modifiers & MappedTypeModifiers.IncludeOptional && !maybeTypeOfKind(propType, TypeFlags.Undefined | TypeFlags.Void) ? getOptionalType(propType) :
0 commit comments