@@ -3458,11 +3458,7 @@ namespace ts {
3458
3458
return symbolToTypeNode(typeAlias, context, SymbolFlags.Type);
3459
3459
}
3460
3460
else {
3461
- context.approximateLength += 3;
3462
- if (!(context.flags & NodeBuilderFlags.NoTruncation)) {
3463
- return createTypeReferenceNode(createIdentifier("..."), /*typeArguments*/ undefined);
3464
- }
3465
- return createKeywordTypeNode(SyntaxKind.AnyKeyword);
3461
+ return createElidedInformationPlaceholder(context);
3466
3462
}
3467
3463
}
3468
3464
else {
@@ -3477,11 +3473,7 @@ namespace ts {
3477
3473
3478
3474
const depth = context.symbolDepth.get(id) || 0;
3479
3475
if (depth > 10) {
3480
- context.approximateLength += 3;
3481
- if (!(context.flags & NodeBuilderFlags.NoTruncation)) {
3482
- return createTypeReferenceNode(createIdentifier("..."), /*typeArguments*/ undefined);
3483
- }
3484
- return createKeywordTypeNode(SyntaxKind.AnyKeyword);
3476
+ return createElidedInformationPlaceholder(context);
3485
3477
}
3486
3478
context.symbolDepth.set(id, depth + 1);
3487
3479
context.visitedTypes.set(typeId, true);
@@ -3674,10 +3666,15 @@ namespace ts {
3674
3666
typeElements.push(<ConstructSignatureDeclaration>signatureToSignatureDeclarationHelper(signature, SyntaxKind.ConstructSignature, context));
3675
3667
}
3676
3668
if (resolvedType.stringIndexInfo) {
3677
- const indexInfo = resolvedType.objectFlags & ObjectFlags.ReverseMapped ?
3678
- createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration) :
3679
- resolvedType.stringIndexInfo;
3680
- typeElements.push(indexInfoToIndexSignatureDeclarationHelper(indexInfo, IndexKind.String, context));
3669
+ let indexSignature: IndexSignatureDeclaration;
3670
+ if (resolvedType.objectFlags & ObjectFlags.ReverseMapped) {
3671
+ indexSignature = indexInfoToIndexSignatureDeclarationHelper(createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration), IndexKind.String, context);
3672
+ indexSignature.type = createElidedInformationPlaceholder(context);
3673
+ }
3674
+ else {
3675
+ indexSignature = indexInfoToIndexSignatureDeclarationHelper(resolvedType.stringIndexInfo, IndexKind.String, context);
3676
+ }
3677
+ typeElements.push(indexSignature);
3681
3678
}
3682
3679
if (resolvedType.numberIndexInfo) {
3683
3680
typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, IndexKind.Number, context));
@@ -3711,8 +3708,17 @@ namespace ts {
3711
3708
}
3712
3709
}
3713
3710
3711
+ function createElidedInformationPlaceholder(context: NodeBuilderContext) {
3712
+ context.approximateLength += 3;
3713
+ if (!(context.flags & NodeBuilderFlags.NoTruncation)) {
3714
+ return createTypeReferenceNode(createIdentifier("..."), /*typeArguments*/ undefined);
3715
+ }
3716
+ return createKeywordTypeNode(SyntaxKind.AnyKeyword);
3717
+ }
3718
+
3714
3719
function addPropertyToElementList(propertySymbol: Symbol, context: NodeBuilderContext, typeElements: TypeElement[]) {
3715
- const propertyType = getCheckFlags(propertySymbol) & CheckFlags.ReverseMapped && context.flags & NodeBuilderFlags.InReverseMappedType ?
3720
+ const propertyIsReverseMapped = !!(getCheckFlags(propertySymbol) & CheckFlags.ReverseMapped);
3721
+ const propertyType = propertyIsReverseMapped && context.flags & NodeBuilderFlags.InReverseMappedType ?
3716
3722
anyType : getTypeOfSymbol(propertySymbol);
3717
3723
const saveEnclosingDeclaration = context.enclosingDeclaration;
3718
3724
context.enclosingDeclaration = undefined;
@@ -3741,8 +3747,14 @@ namespace ts {
3741
3747
}
3742
3748
else {
3743
3749
const savedFlags = context.flags;
3744
- context.flags |= !!(getCheckFlags(propertySymbol) & CheckFlags.ReverseMapped) ? NodeBuilderFlags.InReverseMappedType : 0;
3745
- const propertyTypeNode = propertyType ? typeToTypeNodeHelper(propertyType, context) : createKeywordTypeNode(SyntaxKind.AnyKeyword);
3750
+ context.flags |= propertyIsReverseMapped ? NodeBuilderFlags.InReverseMappedType : 0;
3751
+ let propertyTypeNode: TypeNode;
3752
+ if (propertyIsReverseMapped && !!(savedFlags & NodeBuilderFlags.InReverseMappedType)) {
3753
+ propertyTypeNode = createElidedInformationPlaceholder(context);
3754
+ }
3755
+ else {
3756
+ propertyTypeNode = propertyType ? typeToTypeNodeHelper(propertyType, context) : createKeywordTypeNode(SyntaxKind.AnyKeyword);
3757
+ }
3746
3758
context.flags = savedFlags;
3747
3759
3748
3760
const modifiers = isReadonlySymbol(propertySymbol) ? [createToken(SyntaxKind.ReadonlyKeyword)] : undefined;
0 commit comments