@@ -2047,6 +2047,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2047
2047
var noConstraintType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
2048
2048
var circularConstraintType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
2049
2049
var resolvingDefaultType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
2050
+ var resolvingApparentMappedType = createAnonymousType(/*symbol*/ undefined, emptySymbols, emptyArray, emptyArray, emptyArray);
2050
2051
2051
2052
var markerSuperType = createTypeParameter();
2052
2053
var markerSubType = createTypeParameter();
@@ -2126,7 +2127,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2126
2127
var amalgamatedDuplicates: Map<string, DuplicateInfoForFiles> | undefined;
2127
2128
var reverseMappedCache = new Map<string, Type | undefined>();
2128
2129
var homomorphicMappedTypeInferenceStack: string[] = [];
2129
- var homomorphicMappedTypeApparentTypeStack: Type[] = [];
2130
2130
var ambientModulesCache: Symbol[] | undefined;
2131
2131
/**
2132
2132
* List of every ambient module with a "*" wildcard.
@@ -14438,13 +14438,17 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
14438
14438
}
14439
14439
14440
14440
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);
14442
14449
}
14443
14450
14444
14451
function getResolvedApparentTypeOfMappedType(type: MappedType) {
14445
- if (contains(homomorphicMappedTypeApparentTypeStack, type)) {
14446
- return type;
14447
- }
14448
14452
const mappedType = type.target as MappedType || type;
14449
14453
const typeVariable = getHomomorphicTypeVariable(mappedType);
14450
14454
if (typeVariable && !mappedType.declaration.nameType) {
@@ -14455,9 +14459,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
14455
14459
else {
14456
14460
const modifiersConstraint = getConstraintOfType(getModifiersTypeFromMappedType(type));
14457
14461
if (modifiersConstraint) {
14458
- homomorphicMappedTypeApparentTypeStack.push(type);
14459
14462
constraint = getApparentType(modifiersConstraint);
14460
- homomorphicMappedTypeApparentTypeStack.pop();
14461
14463
}
14462
14464
}
14463
14465
if (constraint && everyType(constraint, isArrayOrTupleType)) {
0 commit comments