@@ -335,7 +335,6 @@ namespace ts {
335335
336336 const globals = createSymbolTable();
337337 const deferredInferenceCache = createMap<Type | undefined>();
338- const deferredMappedTypeInstantiationStack: string[] = [];
339338 let ambientModulesCache: Symbol[] | undefined;
340339 /**
341340 * List of every ambient module with a "*" wildcard.
@@ -2868,23 +2867,7 @@ namespace ts {
28682867 }
28692868
28702869 for (const propertySymbol of properties) {
2871- let propertyType: Type;
2872- if (getCheckFlags(propertySymbol) & CheckFlags.DeferredInferred) {
2873- const deferred = propertySymbol as DeferredTransientSymbol;
2874- const key = deferred.propertyType.id + "," + (deferred.mappedType.symbol ? deferred.mappedType.symbol.id : "");
2875- // Temporary solution to recursive printing: zero out repeated types.
2876- if (contains(deferredMappedTypeInstantiationStack, key)) {
2877- // TODO: Could probably be an actual cache that returns {} when it contains undefined.
2878- propertyType = emptyObjectType;
2879- }
2880- else {
2881- deferredMappedTypeInstantiationStack.push(key)
2882- propertyType = getTypeOfSymbol(propertySymbol);
2883- }
2884- }
2885- else {
2886- propertyType = getTypeOfSymbol(propertySymbol);
2887- }
2870+ const propertyType = getCheckFlags(propertySymbol) & CheckFlags.DeferredInferred ? emptyObjectType : getTypeOfSymbol(propertySymbol);
28882871 const saveEnclosingDeclaration = context.enclosingDeclaration;
28892872 context.enclosingDeclaration = undefined;
28902873 const propertyName = symbolToName(propertySymbol, context, SymbolFlags.Value, /*expectsIdentifier*/ true);
@@ -2911,9 +2894,6 @@ namespace ts {
29112894 /*initializer*/ undefined);
29122895 typeElements.push(propertySignature);
29132896 }
2914- if (getCheckFlags(propertySymbol) & CheckFlags.DeferredInferred) {
2915- deferredMappedTypeInstantiationStack.pop();
2916- }
29172897 }
29182898 return typeElements.length ? typeElements : undefined;
29192899 }
@@ -11278,7 +11258,7 @@ namespace ts {
1127811258 const checkFlags = CheckFlags.DeferredInferred | (readonlyMask && isReadonlySymbol(prop) ? CheckFlags.Readonly : 0);
1127911259 const inferredProp = createSymbol(SymbolFlags.Property | prop.flags & optionalMask, prop.escapedName, checkFlags) as DeferredTransientSymbol;
1128011260 inferredProp.declarations = prop.declarations;
11281- inferredProp.propertyType = propType; // not sure I need this.
11261+ inferredProp.propertyType = propType;
1128211262 inferredProp.mappedType = target;
1128311263 members.set(prop.escapedName, inferredProp);
1128411264 }
@@ -11295,7 +11275,6 @@ namespace ts {
1129511275 const typeParameter = <TypeParameter>getIndexedAccessType((<IndexType>getConstraintTypeFromMappedType(target)).type, getTypeParameterFromMappedType(target));
1129611276 const templateType = getTemplateTypeFromMappedType(target);
1129711277 const inference = createInferenceInfo(typeParameter);
11298- inference.candidates = undefined;
1129911278 inferTypes([inference], sourceType, templateType);
1130011279 return inference.candidates ? getUnionType(inference.candidates, UnionReduction.Subtype) : emptyObjectType;
1130111280 }
0 commit comments