@@ -8586,19 +8586,6 @@ namespace ts {
8586
8586
}
8587
8587
}
8588
8588
else {
8589
- if (getObjectFlags(target) & ObjectFlags.Mapped) {
8590
- const constraintType = getConstraintTypeFromMappedType(<MappedType>target);
8591
- if (getObjectFlags(source) & ObjectFlags.Mapped) {
8592
- inferFromTypes(getConstraintTypeFromMappedType(<MappedType>source), constraintType);
8593
- inferFromTypes(getTemplateTypeFromMappedType(<MappedType>source), getTemplateTypeFromMappedType(<MappedType>target));
8594
- return;
8595
- }
8596
- if (constraintType.flags & TypeFlags.TypeParameter) {
8597
- inferFromTypes(getIndexType(source), constraintType);
8598
- inferFromTypes(getUnionType(map(getPropertiesOfType(source), getTypeOfSymbol)), getTemplateTypeFromMappedType(<MappedType>target));
8599
- return;
8600
- }
8601
- }
8602
8589
source = getApparentType(source);
8603
8590
if (source.flags & TypeFlags.Object) {
8604
8591
if (isInProcess(source, target)) {
@@ -8619,15 +8606,32 @@ namespace ts {
8619
8606
sourceStack[depth] = source;
8620
8607
targetStack[depth] = target;
8621
8608
depth++;
8622
- inferFromProperties(source, target);
8623
- inferFromSignatures(source, target, SignatureKind.Call);
8624
- inferFromSignatures(source, target, SignatureKind.Construct);
8625
- inferFromIndexTypes(source, target);
8609
+ inferFromObjectTypes(source, target);
8626
8610
depth--;
8627
8611
}
8628
8612
}
8629
8613
}
8630
8614
8615
+ function inferFromObjectTypes(source: Type, target: Type) {
8616
+ if (getObjectFlags(target) & ObjectFlags.Mapped) {
8617
+ const constraintType = getConstraintTypeFromMappedType(<MappedType>target);
8618
+ if (getObjectFlags(source) & ObjectFlags.Mapped) {
8619
+ inferFromTypes(getConstraintTypeFromMappedType(<MappedType>source), constraintType);
8620
+ inferFromTypes(getTemplateTypeFromMappedType(<MappedType>source), getTemplateTypeFromMappedType(<MappedType>target));
8621
+ return;
8622
+ }
8623
+ if (constraintType.flags & TypeFlags.TypeParameter) {
8624
+ inferFromTypes(getIndexType(source), constraintType);
8625
+ inferFromTypes(getUnionType(map(getPropertiesOfType(source), getTypeOfSymbol)), getTemplateTypeFromMappedType(<MappedType>target));
8626
+ return;
8627
+ }
8628
+ }
8629
+ inferFromProperties(source, target);
8630
+ inferFromSignatures(source, target, SignatureKind.Call);
8631
+ inferFromSignatures(source, target, SignatureKind.Construct);
8632
+ inferFromIndexTypes(source, target);
8633
+ }
8634
+
8631
8635
function inferFromProperties(source: Type, target: Type) {
8632
8636
const properties = getPropertiesOfObjectType(target);
8633
8637
for (const targetProp of properties) {
0 commit comments