@@ -2047,6 +2047,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
20472047 var noConstraintType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
20482048 var circularConstraintType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
20492049 var resolvingDefaultType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
2050+ var resolvingApparentMappedType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
20502051
20512052 var markerSuperType = createTypeParameter();
20522053 var markerSubType = createTypeParameter();
@@ -2126,7 +2127,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
21262127 var amalgamatedDuplicates: Map<string, DuplicateInfoForFiles> | undefined;
21272128 var reverseMappedCache = new Map<string, Type | undefined>();
21282129 var homomorphicMappedTypeInferenceStack: string[] = [];
2129- var homomorphicMappedTypeApparentTypeStack: Type[] = [];
21302130 var ambientModulesCache: Symbol[] | undefined;
21312131 /**
21322132 * List of every ambient module with a "*" wildcard.
@@ -14438,13 +14438,17 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1443814438 }
1443914439
1444014440 function getApparentTypeOfMappedType(type: MappedType) {
14441- return type.resolvedApparentType || (type.resolvedApparentType = getResolvedApparentTypeOfMappedType(type));
14441+ if (type.resolvedApparentType) {
14442+ if (type.resolvedApparentType === resolvingApparentMappedType) {
14443+ return type.resolvedApparentType = type;
14444+ }
14445+ return type.resolvedApparentType;
14446+ }
14447+ type.resolvedApparentType = resolvingApparentMappedType;
14448+ return type.resolvedApparentType = getResolvedApparentTypeOfMappedType(type);
1444214449 }
1444314450
1444414451 function getResolvedApparentTypeOfMappedType(type: MappedType) {
14445- if (contains(homomorphicMappedTypeApparentTypeStack, type)) {
14446- return type;
14447- }
1444814452 const mappedType = type.target as MappedType || type;
1444914453 const typeVariable = getHomomorphicTypeVariable(mappedType);
1445014454 if (typeVariable && !mappedType.declaration.nameType) {
@@ -14455,9 +14459,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1445514459 else {
1445614460 const modifiersConstraint = getConstraintOfType(getModifiersTypeFromMappedType(type));
1445714461 if (modifiersConstraint) {
14458- homomorphicMappedTypeApparentTypeStack.push(type);
1445914462 constraint = getApparentType(modifiersConstraint);
14460- homomorphicMappedTypeApparentTypeStack.pop();
1446114463 }
1446214464 }
1446314465 if (constraint && everyType(constraint, isArrayOrTupleType)) {
0 commit comments