Skip to content

Commit 955db84

Browse files
committed
Simplify printing of deferred mapped types
Just print {} for the type of deferred symbols. This is simple although it loses fidelity pretty badly. It will not be sufficient for projects that want to export the result of an inference. I don't think any such projects exist right now, though.
1 parent 6b024f6 commit 955db84

1 file changed

Lines changed: 2 additions & 23 deletions

File tree

src/compiler/checker.ts

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)