{
  "type": "Script",
  "span": {
    "start": 55,
    "end": 1050,
    "ctxt": 0
  },
  "body": [
    {
      "type": "TsInterfaceDeclaration",
      "span": {
        "start": 55,
        "end": 86,
        "ctxt": 0
      },
      "id": {
        "type": "Identifier",
        "span": {
          "start": 65,
          "end": 69,
          "ctxt": 0
        },
        "value": "Base",
        "optional": false
      },
      "declare": false,
      "typeParams": null,
      "extends": [],
      "body": {
        "type": "TsInterfaceBody",
        "span": {
          "start": 70,
          "end": 86,
          "ctxt": 0
        },
        "body": [
          {
            "type": "TsPropertySignature",
            "span": {
              "start": 72,
              "end": 84,
              "ctxt": 0
            },
            "readonly": false,
            "key": {
              "type": "Identifier",
              "span": {
                "start": 72,
                "end": 75,
                "ctxt": 0
              },
              "value": "foo",
              "optional": false
            },
            "computed": false,
            "optional": false,
            "init": null,
            "params": [],
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 75,
                "end": 83,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsKeywordType",
                "span": {
                  "start": 77,
                  "end": 83,
                  "ctxt": 0
                },
                "kind": "string"
              }
            },
            "typeParams": null
          }
        ]
      }
    },
    {
      "type": "TsInterfaceDeclaration",
      "span": {
        "start": 87,
        "end": 134,
        "ctxt": 0
      },
      "id": {
        "type": "Identifier",
        "span": {
          "start": 97,
          "end": 104,
          "ctxt": 0
        },
        "value": "Derived",
        "optional": false
      },
      "declare": false,
      "typeParams": null,
      "extends": [
        {
          "type": "TsExpressionWithTypeArguments",
          "span": {
            "start": 113,
            "end": 117,
            "ctxt": 0
          },
          "expression": {
            "type": "Identifier",
            "span": {
              "start": 113,
              "end": 117,
              "ctxt": 0
            },
            "value": "Base",
            "optional": false
          },
          "typeArguments": null
        }
      ],
      "body": {
        "type": "TsInterfaceBody",
        "span": {
          "start": 118,
          "end": 134,
          "ctxt": 0
        },
        "body": [
          {
            "type": "TsPropertySignature",
            "span": {
              "start": 120,
              "end": 132,
              "ctxt": 0
            },
            "readonly": false,
            "key": {
              "type": "Identifier",
              "span": {
                "start": 120,
                "end": 123,
                "ctxt": 0
              },
              "value": "bar",
              "optional": false
            },
            "computed": false,
            "optional": false,
            "init": null,
            "params": [],
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 123,
                "end": 131,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsKeywordType",
                "span": {
                  "start": 125,
                  "end": 131,
                  "ctxt": 0
                },
                "kind": "string"
              }
            },
            "typeParams": null
          }
        ]
      }
    },
    {
      "type": "TsInterfaceDeclaration",
      "span": {
        "start": 135,
        "end": 186,
        "ctxt": 0
      },
      "id": {
        "type": "Identifier",
        "span": {
          "start": 145,
          "end": 153,
          "ctxt": 0
        },
        "value": "Derived2",
        "optional": false
      },
      "declare": false,
      "typeParams": null,
      "extends": [
        {
          "type": "TsExpressionWithTypeArguments",
          "span": {
            "start": 162,
            "end": 169,
            "ctxt": 0
          },
          "expression": {
            "type": "Identifier",
            "span": {
              "start": 162,
              "end": 169,
              "ctxt": 0
            },
            "value": "Derived",
            "optional": false
          },
          "typeArguments": null
        }
      ],
      "body": {
        "type": "TsInterfaceBody",
        "span": {
          "start": 170,
          "end": 186,
          "ctxt": 0
        },
        "body": [
          {
            "type": "TsPropertySignature",
            "span": {
              "start": 172,
              "end": 184,
              "ctxt": 0
            },
            "readonly": false,
            "key": {
              "type": "Identifier",
              "span": {
                "start": 172,
                "end": 175,
                "ctxt": 0
              },
              "value": "baz",
              "optional": false
            },
            "computed": false,
            "optional": false,
            "init": null,
            "params": [],
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 175,
                "end": 183,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsKeywordType",
                "span": {
                  "start": 177,
                  "end": 183,
                  "ctxt": 0
                },
                "kind": "string"
              }
            },
            "typeParams": null
          }
        ]
      }
    },
    {
      "type": "TsInterfaceDeclaration",
      "span": {
        "start": 188,
        "end": 226,
        "ctxt": 0
      },
      "id": {
        "type": "Identifier",
        "span": {
          "start": 198,
          "end": 199,
          "ctxt": 0
        },
        "value": "A",
        "optional": false
      },
      "declare": false,
      "typeParams": null,
      "extends": [],
      "body": {
        "type": "TsInterfaceBody",
        "span": {
          "start": 200,
          "end": 226,
          "ctxt": 0
        },
        "body": [
          {
            "type": "TsIndexSignature",
            "params": [
              {
                "type": "Identifier",
                "span": {
                  "start": 207,
                  "end": 216,
                  "ctxt": 0
                },
                "value": "x",
                "optional": false,
                "typeAnnotation": {
                  "type": "TsTypeAnnotation",
                  "span": {
                    "start": 208,
                    "end": 216,
                    "ctxt": 0
                  },
                  "typeAnnotation": {
                    "type": "TsKeywordType",
                    "span": {
                      "start": 210,
                      "end": 216,
                      "ctxt": 0
                    },
                    "kind": "string"
                  }
                }
              }
            ],
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 217,
                "end": 223,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsTypeReference",
                "span": {
                  "start": 219,
                  "end": 223,
                  "ctxt": 0
                },
                "typeName": {
                  "type": "Identifier",
                  "span": {
                    "start": 219,
                    "end": 223,
                    "ctxt": 0
                  },
                  "value": "Base",
                  "optional": false
                },
                "typeParams": null
              }
            },
            "readonly": false,
            "static": false,
            "span": {
              "start": 206,
              "end": 224,
              "ctxt": 0
            }
          }
        ]
      }
    },
    {
      "type": "VariableDeclaration",
      "span": {
        "start": 228,
        "end": 237,
        "ctxt": 0
      },
      "kind": "var",
      "declare": false,
      "declarations": [
        {
          "type": "VariableDeclarator",
          "span": {
            "start": 232,
            "end": 236,
            "ctxt": 0
          },
          "id": {
            "type": "Identifier",
            "span": {
              "start": 232,
              "end": 233,
              "ctxt": 0
            },
            "value": "a",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 233,
                "end": 236,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsTypeReference",
                "span": {
                  "start": 235,
                  "end": 236,
                  "ctxt": 0
                },
                "typeName": {
                  "type": "Identifier",
                  "span": {
                    "start": 235,
                    "end": 236,
                    "ctxt": 0
                  },
                  "value": "A",
                  "optional": false
                },
                "typeParams": null
              }
            }
          },
          "init": null,
          "definite": false
        }
      ]
    },
    {
      "type": "VariableDeclaration",
      "span": {
        "start": 239,
        "end": 271,
        "ctxt": 0
      },
      "kind": "var",
      "declare": false,
      "declarations": [
        {
          "type": "VariableDeclarator",
          "span": {
            "start": 243,
            "end": 271,
            "ctxt": 0
          },
          "id": {
            "type": "Identifier",
            "span": {
              "start": 243,
              "end": 244,
              "ctxt": 0
            },
            "value": "b",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 244,
                "end": 271,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsTypeLiteral",
                "span": {
                  "start": 246,
                  "end": 271,
                  "ctxt": 0
                },
                "members": [
                  {
                    "type": "TsIndexSignature",
                    "params": [
                      {
                        "type": "Identifier",
                        "span": {
                          "start": 249,
                          "end": 258,
                          "ctxt": 0
                        },
                        "value": "x",
                        "optional": false,
                        "typeAnnotation": {
                          "type": "TsTypeAnnotation",
                          "span": {
                            "start": 250,
                            "end": 258,
                            "ctxt": 0
                          },
                          "typeAnnotation": {
                            "type": "TsKeywordType",
                            "span": {
                              "start": 252,
                              "end": 258,
                              "ctxt": 0
                            },
                            "kind": "string"
                          }
                        }
                      }
                    ],
                    "typeAnnotation": {
                      "type": "TsTypeAnnotation",
                      "span": {
                        "start": 259,
                        "end": 268,
                        "ctxt": 0
                      },
                      "typeAnnotation": {
                        "type": "TsTypeReference",
                        "span": {
                          "start": 261,
                          "end": 268,
                          "ctxt": 0
                        },
                        "typeName": {
                          "type": "Identifier",
                          "span": {
                            "start": 261,
                            "end": 268,
                            "ctxt": 0
                          },
                          "value": "Derived",
                          "optional": false
                        },
                        "typeParams": null
                      }
                    },
                    "readonly": false,
                    "static": false,
                    "span": {
                      "start": 248,
                      "end": 269,
                      "ctxt": 0
                    }
                  }
                ]
              }
            }
          },
          "init": null,
          "definite": false
        }
      ]
    },
    {
      "type": "ExpressionStatement",
      "span": {
        "start": 272,
        "end": 278,
        "ctxt": 0
      },
      "expression": {
        "type": "AssignmentExpression",
        "span": {
          "start": 272,
          "end": 277,
          "ctxt": 0
        },
        "operator": "=",
        "left": {
          "type": "Identifier",
          "span": {
            "start": 272,
            "end": 273,
            "ctxt": 0
          },
          "value": "a",
          "optional": false,
          "typeAnnotation": null
        },
        "right": {
          "type": "Identifier",
          "span": {
            "start": 276,
            "end": 277,
            "ctxt": 0
          },
          "value": "b",
          "optional": false
        }
      }
    },
    {
      "type": "ExpressionStatement",
      "span": {
        "start": 285,
        "end": 291,
        "ctxt": 0
      },
      "expression": {
        "type": "AssignmentExpression",
        "span": {
          "start": 285,
          "end": 290,
          "ctxt": 0
        },
        "operator": "=",
        "left": {
          "type": "Identifier",
          "span": {
            "start": 285,
            "end": 286,
            "ctxt": 0
          },
          "value": "b",
          "optional": false,
          "typeAnnotation": null
        },
        "right": {
          "type": "Identifier",
          "span": {
            "start": 289,
            "end": 290,
            "ctxt": 0
          },
          "value": "a",
          "optional": false
        }
      }
    },
    {
      "type": "VariableDeclaration",
      "span": {
        "start": 302,
        "end": 336,
        "ctxt": 0
      },
      "kind": "var",
      "declare": false,
      "declarations": [
        {
          "type": "VariableDeclarator",
          "span": {
            "start": 306,
            "end": 336,
            "ctxt": 0
          },
          "id": {
            "type": "Identifier",
            "span": {
              "start": 306,
              "end": 308,
              "ctxt": 0
            },
            "value": "b2",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 308,
                "end": 336,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsTypeLiteral",
                "span": {
                  "start": 310,
                  "end": 336,
                  "ctxt": 0
                },
                "members": [
                  {
                    "type": "TsIndexSignature",
                    "params": [
                      {
                        "type": "Identifier",
                        "span": {
                          "start": 313,
                          "end": 322,
                          "ctxt": 0
                        },
                        "value": "x",
                        "optional": false,
                        "typeAnnotation": {
                          "type": "TsTypeAnnotation",
                          "span": {
                            "start": 314,
                            "end": 322,
                            "ctxt": 0
                          },
                          "typeAnnotation": {
                            "type": "TsKeywordType",
                            "span": {
                              "start": 316,
                              "end": 322,
                              "ctxt": 0
                            },
                            "kind": "string"
                          }
                        }
                      }
                    ],
                    "typeAnnotation": {
                      "type": "TsTypeAnnotation",
                      "span": {
                        "start": 323,
                        "end": 333,
                        "ctxt": 0
                      },
                      "typeAnnotation": {
                        "type": "TsTypeReference",
                        "span": {
                          "start": 325,
                          "end": 333,
                          "ctxt": 0
                        },
                        "typeName": {
                          "type": "Identifier",
                          "span": {
                            "start": 325,
                            "end": 333,
                            "ctxt": 0
                          },
                          "value": "Derived2",
                          "optional": false
                        },
                        "typeParams": null
                      }
                    },
                    "readonly": false,
                    "static": false,
                    "span": {
                      "start": 312,
                      "end": 334,
                      "ctxt": 0
                    }
                  }
                ]
              }
            }
          },
          "init": null,
          "definite": false
        }
      ]
    },
    {
      "type": "ExpressionStatement",
      "span": {
        "start": 337,
        "end": 344,
        "ctxt": 0
      },
      "expression": {
        "type": "AssignmentExpression",
        "span": {
          "start": 337,
          "end": 343,
          "ctxt": 0
        },
        "operator": "=",
        "left": {
          "type": "Identifier",
          "span": {
            "start": 337,
            "end": 338,
            "ctxt": 0
          },
          "value": "a",
          "optional": false,
          "typeAnnotation": null
        },
        "right": {
          "type": "Identifier",
          "span": {
            "start": 341,
            "end": 343,
            "ctxt": 0
          },
          "value": "b2",
          "optional": false
        }
      }
    },
    {
      "type": "ExpressionStatement",
      "span": {
        "start": 351,
        "end": 358,
        "ctxt": 0
      },
      "expression": {
        "type": "AssignmentExpression",
        "span": {
          "start": 351,
          "end": 357,
          "ctxt": 0
        },
        "operator": "=",
        "left": {
          "type": "Identifier",
          "span": {
            "start": 351,
            "end": 353,
            "ctxt": 0
          },
          "value": "b2",
          "optional": false,
          "typeAnnotation": null
        },
        "right": {
          "type": "Identifier",
          "span": {
            "start": 356,
            "end": 357,
            "ctxt": 0
          },
          "value": "a",
          "optional": false
        }
      }
    },
    {
      "type": "TsModuleDeclaration",
      "span": {
        "start": 369,
        "end": 1050,
        "ctxt": 0
      },
      "declare": false,
      "global": false,
      "id": {
        "type": "Identifier",
        "span": {
          "start": 376,
          "end": 384,
          "ctxt": 0
        },
        "value": "Generics",
        "optional": false
      },
      "body": {
        "type": "TsModuleBlock",
        "span": {
          "start": 385,
          "end": 1050,
          "ctxt": 0
        },
        "body": [
          {
            "type": "TsInterfaceDeclaration",
            "span": {
              "start": 391,
              "end": 450,
              "ctxt": 0
            },
            "id": {
              "type": "Identifier",
              "span": {
                "start": 401,
                "end": 402,
                "ctxt": 0
              },
              "value": "A",
              "optional": false
            },
            "declare": false,
            "typeParams": {
              "type": "TsTypeParameterDeclaration",
              "span": {
                "start": 402,
                "end": 418,
                "ctxt": 0
              },
              "parameters": [
                {
                  "type": "TsTypeParameter",
                  "span": {
                    "start": 403,
                    "end": 417,
                    "ctxt": 0
                  },
                  "name": {
                    "type": "Identifier",
                    "span": {
                      "start": 403,
                      "end": 404,
                      "ctxt": 0
                    },
                    "value": "T",
                    "optional": false
                  },
                  "constraint": {
                    "type": "TsTypeReference",
                    "span": {
                      "start": 413,
                      "end": 417,
                      "ctxt": 0
                    },
                    "typeName": {
                      "type": "Identifier",
                      "span": {
                        "start": 413,
                        "end": 417,
                        "ctxt": 0
                      },
                      "value": "Base",
                      "optional": false
                    },
                    "typeParams": null
                  },
                  "default": null
                }
              ]
            },
            "extends": [],
            "body": {
              "type": "TsInterfaceBody",
              "span": {
                "start": 419,
                "end": 450,
                "ctxt": 0
              },
              "body": [
                {
                  "type": "TsIndexSignature",
                  "params": [
                    {
                      "type": "Identifier",
                      "span": {
                        "start": 430,
                        "end": 439,
                        "ctxt": 0
                      },
                      "value": "x",
                      "optional": false,
                      "typeAnnotation": {
                        "type": "TsTypeAnnotation",
                        "span": {
                          "start": 431,
                          "end": 439,
                          "ctxt": 0
                        },
                        "typeAnnotation": {
                          "type": "TsKeywordType",
                          "span": {
                            "start": 433,
                            "end": 439,
                            "ctxt": 0
                          },
                          "kind": "string"
                        }
                      }
                    }
                  ],
                  "typeAnnotation": {
                    "type": "TsTypeAnnotation",
                    "span": {
                      "start": 440,
                      "end": 443,
                      "ctxt": 0
                    },
                    "typeAnnotation": {
                      "type": "TsTypeReference",
                      "span": {
                        "start": 442,
                        "end": 443,
                        "ctxt": 0
                      },
                      "typeName": {
                        "type": "Identifier",
                        "span": {
                          "start": 442,
                          "end": 443,
                          "ctxt": 0
                        },
                        "value": "T",
                        "optional": false
                      },
                      "typeParams": null
                    }
                  },
                  "readonly": false,
                  "static": false,
                  "span": {
                    "start": 429,
                    "end": 444,
                    "ctxt": 0
                  }
                }
              ]
            }
          },
          {
            "type": "TsInterfaceDeclaration",
            "span": {
              "start": 456,
              "end": 527,
              "ctxt": 0
            },
            "id": {
              "type": "Identifier",
              "span": {
                "start": 466,
                "end": 467,
                "ctxt": 0
              },
              "value": "B",
              "optional": false
            },
            "declare": false,
            "typeParams": null,
            "extends": [
              {
                "type": "TsExpressionWithTypeArguments",
                "span": {
                  "start": 476,
                  "end": 483,
                  "ctxt": 0
                },
                "expression": {
                  "type": "Identifier",
                  "span": {
                    "start": 476,
                    "end": 477,
                    "ctxt": 0
                  },
                  "value": "A",
                  "optional": false
                },
                "typeArguments": {
                  "type": "TsTypeParameterInstantiation",
                  "span": {
                    "start": 477,
                    "end": 483,
                    "ctxt": 0
                  },
                  "params": [
                    {
                      "type": "TsTypeReference",
                      "span": {
                        "start": 478,
                        "end": 482,
                        "ctxt": 0
                      },
                      "typeName": {
                        "type": "Identifier",
                        "span": {
                          "start": 478,
                          "end": 482,
                          "ctxt": 0
                        },
                        "value": "Base",
                        "optional": false
                      },
                      "typeParams": null
                    }
                  ]
                }
              }
            ],
            "body": {
              "type": "TsInterfaceBody",
              "span": {
                "start": 484,
                "end": 527,
                "ctxt": 0
              },
              "body": [
                {
                  "type": "TsIndexSignature",
                  "params": [
                    {
                      "type": "Identifier",
                      "span": {
                        "start": 495,
                        "end": 504,
                        "ctxt": 0
                      },
                      "value": "x",
                      "optional": false,
                      "typeAnnotation": {
                        "type": "TsTypeAnnotation",
                        "span": {
                          "start": 496,
                          "end": 504,
                          "ctxt": 0
                        },
                        "typeAnnotation": {
                          "type": "TsKeywordType",
                          "span": {
                            "start": 498,
                            "end": 504,
                            "ctxt": 0
                          },
                          "kind": "string"
                        }
                      }
                    }
                  ],
                  "typeAnnotation": {
                    "type": "TsTypeAnnotation",
                    "span": {
                      "start": 505,
                      "end": 514,
                      "ctxt": 0
                    },
                    "typeAnnotation": {
                      "type": "TsTypeReference",
                      "span": {
                        "start": 507,
                        "end": 514,
                        "ctxt": 0
                      },
                      "typeName": {
                        "type": "Identifier",
                        "span": {
                          "start": 507,
                          "end": 514,
                          "ctxt": 0
                        },
                        "value": "Derived",
                        "optional": false
                      },
                      "typeParams": null
                    }
                  },
                  "readonly": false,
                  "static": false,
                  "span": {
                    "start": 494,
                    "end": 515,
                    "ctxt": 0
                  }
                }
              ]
            }
          },
          {
            "type": "VariableDeclaration",
            "span": {
              "start": 533,
              "end": 567,
              "ctxt": 0
            },
            "kind": "var",
            "declare": false,
            "declarations": [
              {
                "type": "VariableDeclarator",
                "span": {
                  "start": 537,
                  "end": 566,
                  "ctxt": 0
                },
                "id": {
                  "type": "Identifier",
                  "span": {
                    "start": 537,
                    "end": 539,
                    "ctxt": 0
                  },
                  "value": "b1",
                  "optional": false,
                  "typeAnnotation": {
                    "type": "TsTypeAnnotation",
                    "span": {
                      "start": 539,
                      "end": 566,
                      "ctxt": 0
                    },
                    "typeAnnotation": {
                      "type": "TsTypeLiteral",
                      "span": {
                        "start": 541,
                        "end": 566,
                        "ctxt": 0
                      },
                      "members": [
                        {
                          "type": "TsIndexSignature",
                          "params": [
                            {
                              "type": "Identifier",
                              "span": {
                                "start": 544,
                                "end": 553,
                                "ctxt": 0
                              },
                              "value": "x",
                              "optional": false,
                              "typeAnnotation": {
                                "type": "TsTypeAnnotation",
                                "span": {
                                  "start": 545,
                                  "end": 553,
                                  "ctxt": 0
                                },
                                "typeAnnotation": {
                                  "type": "TsKeywordType",
                                  "span": {
                                    "start": 547,
                                    "end": 553,
                                    "ctxt": 0
                                  },
                                  "kind": "string"
                                }
                              }
                            }
                          ],
                          "typeAnnotation": {
                            "type": "TsTypeAnnotation",
                            "span": {
                              "start": 554,
                              "end": 563,
                              "ctxt": 0
                            },
                            "typeAnnotation": {
                              "type": "TsTypeReference",
                              "span": {
                                "start": 556,
                                "end": 563,
                                "ctxt": 0
                              },
                              "typeName": {
                                "type": "Identifier",
                                "span": {
                                  "start": 556,
                                  "end": 563,
                                  "ctxt": 0
                                },
                                "value": "Derived",
                                "optional": false
                              },
                              "typeParams": null
                            }
                          },
                          "readonly": false,
                          "static": false,
                          "span": {
                            "start": 543,
                            "end": 564,
                            "ctxt": 0
                          }
                        }
                      ]
                    }
                  }
                },
                "init": null,
                "definite": false
              }
            ]
          },
          {
            "type": "VariableDeclaration",
            "span": {
              "start": 572,
              "end": 588,
              "ctxt": 0
            },
            "kind": "var",
            "declare": false,
            "declarations": [
              {
                "type": "VariableDeclarator",
                "span": {
                  "start": 576,
                  "end": 587,
                  "ctxt": 0
                },
                "id": {
                  "type": "Identifier",
                  "span": {
                    "start": 576,
                    "end": 578,
                    "ctxt": 0
                  },
                  "value": "a1",
                  "optional": false,
                  "typeAnnotation": {
                    "type": "TsTypeAnnotation",
                    "span": {
                      "start": 578,
                      "end": 587,
                      "ctxt": 0
                    },
                    "typeAnnotation": {
                      "type": "TsTypeReference",
                      "span": {
                        "start": 580,
                        "end": 587,
                        "ctxt": 0
                      },
                      "typeName": {
                        "type": "Identifier",
                        "span": {
                          "start": 580,
                          "end": 581,
                          "ctxt": 0
                        },
                        "value": "A",
                        "optional": false
                      },
                      "typeParams": {
                        "type": "TsTypeParameterInstantiation",
                        "span": {
                          "start": 581,
                          "end": 587,
                          "ctxt": 0
                        },
                        "params": [
                          {
                            "type": "TsTypeReference",
                            "span": {
                              "start": 582,
                              "end": 586,
                              "ctxt": 0
                            },
                            "typeName": {
                              "type": "Identifier",
                              "span": {
                                "start": 582,
                                "end": 586,
                                "ctxt": 0
                              },
                              "value": "Base",
                              "optional": false
                            },
                            "typeParams": null
                          }
                        ]
                      }
                    }
                  }
                },
                "init": null,
                "definite": false
              }
            ]
          },
          {
            "type": "ExpressionStatement",
            "span": {
              "start": 593,
              "end": 601,
              "ctxt": 0
            },
            "expression": {
              "type": "AssignmentExpression",
              "span": {
                "start": 593,
                "end": 600,
                "ctxt": 0
              },
              "operator": "=",
              "left": {
                "type": "Identifier",
                "span": {
                  "start": 593,
                  "end": 595,
                  "ctxt": 0
                },
                "value": "a1",
                "optional": false,
                "typeAnnotation": null
              },
              "right": {
                "type": "Identifier",
                "span": {
                  "start": 598,
                  "end": 600,
                  "ctxt": 0
                },
                "value": "b1",
                "optional": false
              }
            }
          },
          {
            "type": "ExpressionStatement",
            "span": {
              "start": 612,
              "end": 620,
              "ctxt": 0
            },
            "expression": {
              "type": "AssignmentExpression",
              "span": {
                "start": 612,
                "end": 619,
                "ctxt": 0
              },
              "operator": "=",
              "left": {
                "type": "Identifier",
                "span": {
                  "start": 612,
                  "end": 614,
                  "ctxt": 0
                },
                "value": "b1",
                "optional": false,
                "typeAnnotation": null
              },
              "right": {
                "type": "Identifier",
                "span": {
                  "start": 617,
                  "end": 619,
                  "ctxt": 0
                },
                "value": "a1",
                "optional": false
              }
            }
          },
          {
            "type": "TsInterfaceDeclaration",
            "span": {
              "start": 635,
              "end": 708,
              "ctxt": 0
            },
            "id": {
              "type": "Identifier",
              "span": {
                "start": 645,
                "end": 647,
                "ctxt": 0
              },
              "value": "B2",
              "optional": false
            },
            "declare": false,
            "typeParams": null,
            "extends": [
              {
                "type": "TsExpressionWithTypeArguments",
                "span": {
                  "start": 656,
                  "end": 663,
                  "ctxt": 0
                },
                "expression": {
                  "type": "Identifier",
                  "span": {
                    "start": 656,
                    "end": 657,
                    "ctxt": 0
                  },
                  "value": "A",
                  "optional": false
                },
                "typeArguments": {
                  "type": "TsTypeParameterInstantiation",
                  "span": {
                    "start": 657,
                    "end": 663,
                    "ctxt": 0
                  },
                  "params": [
                    {
                      "type": "TsTypeReference",
                      "span": {
                        "start": 658,
                        "end": 662,
                        "ctxt": 0
                      },
                      "typeName": {
                        "type": "Identifier",
                        "span": {
                          "start": 658,
                          "end": 662,
                          "ctxt": 0
                        },
                        "value": "Base",
                        "optional": false
                      },
                      "typeParams": null
                    }
                  ]
                }
              }
            ],
            "body": {
              "type": "TsInterfaceBody",
              "span": {
                "start": 664,
                "end": 708,
                "ctxt": 0
              },
              "body": [
                {
                  "type": "TsIndexSignature",
                  "params": [
                    {
                      "type": "Identifier",
                      "span": {
                        "start": 675,
                        "end": 684,
                        "ctxt": 0
                      },
                      "value": "x",
                      "optional": false,
                      "typeAnnotation": {
                        "type": "TsTypeAnnotation",
                        "span": {
                          "start": 676,
                          "end": 684,
                          "ctxt": 0
                        },
                        "typeAnnotation": {
                          "type": "TsKeywordType",
                          "span": {
                            "start": 678,
                            "end": 684,
                            "ctxt": 0
                          },
                          "kind": "string"
                        }
                      }
                    }
                  ],
                  "typeAnnotation": {
                    "type": "TsTypeAnnotation",
                    "span": {
                      "start": 685,
                      "end": 695,
                      "ctxt": 0
                    },
                    "typeAnnotation": {
                      "type": "TsTypeReference",
                      "span": {
                        "start": 687,
                        "end": 695,
                        "ctxt": 0
                      },
                      "typeName": {
                        "type": "Identifier",
                        "span": {
                          "start": 687,
                          "end": 695,
                          "ctxt": 0
                        },
                        "value": "Derived2",
                        "optional": false
                      },
                      "typeParams": null
                    }
                  },
                  "readonly": false,
                  "static": false,
                  "span": {
                    "start": 674,
                    "end": 696,
                    "ctxt": 0
                  }
                }
              ]
            }
          },
          {
            "type": "VariableDeclaration",
            "span": {
              "start": 714,
              "end": 749,
              "ctxt": 0
            },
            "kind": "var",
            "declare": false,
            "declarations": [
              {
                "type": "VariableDeclarator",
                "span": {
                  "start": 718,
                  "end": 748,
                  "ctxt": 0
                },
                "id": {
                  "type": "Identifier",
                  "span": {
                    "start": 718,
                    "end": 720,
                    "ctxt": 0
                  },
                  "value": "b2",
                  "optional": false,
                  "typeAnnotation": {
                    "type": "TsTypeAnnotation",
                    "span": {
                      "start": 720,
                      "end": 748,
                      "ctxt": 0
                    },
                    "typeAnnotation": {
                      "type": "TsTypeLiteral",
                      "span": {
                        "start": 722,
                        "end": 748,
                        "ctxt": 0
                      },
                      "members": [
                        {
                          "type": "TsIndexSignature",
                          "params": [
                            {
                              "type": "Identifier",
                              "span": {
                                "start": 725,
                                "end": 734,
                                "ctxt": 0
                              },
                              "value": "x",
                              "optional": false,
                              "typeAnnotation": {
                                "type": "TsTypeAnnotation",
                                "span": {
                                  "start": 726,
                                  "end": 734,
                                  "ctxt": 0
                                },
                                "typeAnnotation": {
                                  "type": "TsKeywordType",
                                  "span": {
                                    "start": 728,
                                    "end": 734,
                                    "ctxt": 0
                                  },
                                  "kind": "string"
                                }
                              }
                            }
                          ],
                          "typeAnnotation": {
                            "type": "TsTypeAnnotation",
                            "span": {
                              "start": 735,
                              "end": 745,
                              "ctxt": 0
                            },
                            "typeAnnotation": {
                              "type": "TsTypeReference",
                              "span": {
                                "start": 737,
                                "end": 745,
                                "ctxt": 0
                              },
                              "typeName": {
                                "type": "Identifier",
                                "span": {
                                  "start": 737,
                                  "end": 745,
                                  "ctxt": 0
                                },
                                "value": "Derived2",
                                "optional": false
                              },
                              "typeParams": null
                            }
                          },
                          "readonly": false,
                          "static": false,
                          "span": {
                            "start": 724,
                            "end": 746,
                            "ctxt": 0
                          }
                        }
                      ]
                    }
                  }
                },
                "init": null,
                "definite": false
              }
            ]
          },
          {
            "type": "ExpressionStatement",
            "span": {
              "start": 754,
              "end": 762,
              "ctxt": 0
            },
            "expression": {
              "type": "AssignmentExpression",
              "span": {
                "start": 754,
                "end": 761,
                "ctxt": 0
              },
              "operator": "=",
              "left": {
                "type": "Identifier",
                "span": {
                  "start": 754,
                  "end": 756,
                  "ctxt": 0
                },
                "value": "a1",
                "optional": false,
                "typeAnnotation": null
              },
              "right": {
                "type": "Identifier",
                "span": {
                  "start": 759,
                  "end": 761,
                  "ctxt": 0
                },
                "value": "b2",
                "optional": false
              }
            }
          },
          {
            "type": "ExpressionStatement",
            "span": {
              "start": 773,
              "end": 781,
              "ctxt": 0
            },
            "expression": {
              "type": "AssignmentExpression",
              "span": {
                "start": 773,
                "end": 780,
                "ctxt": 0
              },
              "operator": "=",
              "left": {
                "type": "Identifier",
                "span": {
                  "start": 773,
                  "end": 775,
                  "ctxt": 0
                },
                "value": "b2",
                "optional": false,
                "typeAnnotation": null
              },
              "right": {
                "type": "Identifier",
                "span": {
                  "start": 778,
                  "end": 780,
                  "ctxt": 0
                },
                "value": "a1",
                "optional": false
              }
            }
          },
          {
            "type": "FunctionDeclaration",
            "identifier": {
              "type": "Identifier",
              "span": {
                "start": 805,
                "end": 808,
                "ctxt": 0
              },
              "value": "foo",
              "optional": false
            },
            "declare": false,
            "params": [],
            "decorators": [],
            "span": {
              "start": 796,
              "end": 1048,
              "ctxt": 0
            },
            "body": {
              "type": "BlockStatement",
              "span": {
                "start": 827,
                "end": 1048,
                "ctxt": 0
              },
              "stmts": [
                {
                  "type": "VariableDeclaration",
                  "span": {
                    "start": 837,
                    "end": 871,
                    "ctxt": 0
                  },
                  "kind": "var",
                  "declare": false,
                  "declarations": [
                    {
                      "type": "VariableDeclarator",
                      "span": {
                        "start": 841,
                        "end": 870,
                        "ctxt": 0
                      },
                      "id": {
                        "type": "Identifier",
                        "span": {
                          "start": 841,
                          "end": 843,
                          "ctxt": 0
                        },
                        "value": "b3",
                        "optional": false,
                        "typeAnnotation": {
                          "type": "TsTypeAnnotation",
                          "span": {
                            "start": 843,
                            "end": 870,
                            "ctxt": 0
                          },
                          "typeAnnotation": {
                            "type": "TsTypeLiteral",
                            "span": {
                              "start": 845,
                              "end": 870,
                              "ctxt": 0
                            },
                            "members": [
                              {
                                "type": "TsIndexSignature",
                                "params": [
                                  {
                                    "type": "Identifier",
                                    "span": {
                                      "start": 848,
                                      "end": 857,
                                      "ctxt": 0
                                    },
                                    "value": "x",
                                    "optional": false,
                                    "typeAnnotation": {
                                      "type": "TsTypeAnnotation",
                                      "span": {
                                        "start": 849,
                                        "end": 857,
                                        "ctxt": 0
                                      },
                                      "typeAnnotation": {
                                        "type": "TsKeywordType",
                                        "span": {
                                          "start": 851,
                                          "end": 857,
                                          "ctxt": 0
                                        },
                                        "kind": "string"
                                      }
                                    }
                                  }
                                ],
                                "typeAnnotation": {
                                  "type": "TsTypeAnnotation",
                                  "span": {
                                    "start": 858,
                                    "end": 867,
                                    "ctxt": 0
                                  },
                                  "typeAnnotation": {
                                    "type": "TsTypeReference",
                                    "span": {
                                      "start": 860,
                                      "end": 867,
                                      "ctxt": 0
                                    },
                                    "typeName": {
                                      "type": "Identifier",
                                      "span": {
                                        "start": 860,
                                        "end": 867,
                                        "ctxt": 0
                                      },
                                      "value": "Derived",
                                      "optional": false
                                    },
                                    "typeParams": null
                                  }
                                },
                                "readonly": false,
                                "static": false,
                                "span": {
                                  "start": 847,
                                  "end": 868,
                                  "ctxt": 0
                                }
                              }
                            ]
                          }
                        }
                      },
                      "init": null,
                      "definite": false
                    }
                  ]
                },
                {
                  "type": "VariableDeclaration",
                  "span": {
                    "start": 880,
                    "end": 893,
                    "ctxt": 0
                  },
                  "kind": "var",
                  "declare": false,
                  "declarations": [
                    {
                      "type": "VariableDeclarator",
                      "span": {
                        "start": 884,
                        "end": 892,
                        "ctxt": 0
                      },
                      "id": {
                        "type": "Identifier",
                        "span": {
                          "start": 884,
                          "end": 886,
                          "ctxt": 0
                        },
                        "value": "a3",
                        "optional": false,
                        "typeAnnotation": {
                          "type": "TsTypeAnnotation",
                          "span": {
                            "start": 886,
                            "end": 892,
                            "ctxt": 0
                          },
                          "typeAnnotation": {
                            "type": "TsTypeReference",
                            "span": {
                              "start": 888,
                              "end": 892,
                              "ctxt": 0
                            },
                            "typeName": {
                              "type": "Identifier",
                              "span": {
                                "start": 888,
                                "end": 889,
                                "ctxt": 0
                              },
                              "value": "A",
                              "optional": false
                            },
                            "typeParams": {
                              "type": "TsTypeParameterInstantiation",
                              "span": {
                                "start": 889,
                                "end": 892,
                                "ctxt": 0
                              },
                              "params": [
                                {
                                  "type": "TsTypeReference",
                                  "span": {
                                    "start": 890,
                                    "end": 891,
                                    "ctxt": 0
                                  },
                                  "typeName": {
                                    "type": "Identifier",
                                    "span": {
                                      "start": 890,
                                      "end": 891,
                                      "ctxt": 0
                                    },
                                    "value": "T",
                                    "optional": false
                                  },
                                  "typeParams": null
                                }
                              ]
                            }
                          }
                        }
                      },
                      "init": null,
                      "definite": false
                    }
                  ]
                },
                {
                  "type": "ExpressionStatement",
                  "span": {
                    "start": 902,
                    "end": 910,
                    "ctxt": 0
                  },
                  "expression": {
                    "type": "AssignmentExpression",
                    "span": {
                      "start": 902,
                      "end": 909,
                      "ctxt": 0
                    },
                    "operator": "=",
                    "left": {
                      "type": "Identifier",
                      "span": {
                        "start": 902,
                        "end": 904,
                        "ctxt": 0
                      },
                      "value": "a3",
                      "optional": false,
                      "typeAnnotation": null
                    },
                    "right": {
                      "type": "Identifier",
                      "span": {
                        "start": 907,
                        "end": 909,
                        "ctxt": 0
                      },
                      "value": "b3",
                      "optional": false
                    }
                  }
                },
                {
                  "type": "ExpressionStatement",
                  "span": {
                    "start": 928,
                    "end": 936,
                    "ctxt": 0
                  },
                  "expression": {
                    "type": "AssignmentExpression",
                    "span": {
                      "start": 928,
                      "end": 935,
                      "ctxt": 0
                    },
                    "operator": "=",
                    "left": {
                      "type": "Identifier",
                      "span": {
                        "start": 928,
                        "end": 930,
                        "ctxt": 0
                      },
                      "value": "b3",
                      "optional": false,
                      "typeAnnotation": null
                    },
                    "right": {
                      "type": "Identifier",
                      "span": {
                        "start": 933,
                        "end": 935,
                        "ctxt": 0
                      },
                      "value": "a3",
                      "optional": false
                    }
                  }
                },
                {
                  "type": "VariableDeclaration",
                  "span": {
                    "start": 955,
                    "end": 990,
                    "ctxt": 0
                  },
                  "kind": "var",
                  "declare": false,
                  "declarations": [
                    {
                      "type": "VariableDeclarator",
                      "span": {
                        "start": 959,
                        "end": 989,
                        "ctxt": 0
                      },
                      "id": {
                        "type": "Identifier",
                        "span": {
                          "start": 959,
                          "end": 961,
                          "ctxt": 0
                        },
                        "value": "b4",
                        "optional": false,
                        "typeAnnotation": {
                          "type": "TsTypeAnnotation",
                          "span": {
                            "start": 961,
                            "end": 989,
                            "ctxt": 0
                          },
                          "typeAnnotation": {
                            "type": "TsTypeLiteral",
                            "span": {
                              "start": 963,
                              "end": 989,
                              "ctxt": 0
                            },
                            "members": [
                              {
                                "type": "TsIndexSignature",
                                "params": [
                                  {
                                    "type": "Identifier",
                                    "span": {
                                      "start": 966,
                                      "end": 975,
                                      "ctxt": 0
                                    },
                                    "value": "x",
                                    "optional": false,
                                    "typeAnnotation": {
                                      "type": "TsTypeAnnotation",
                                      "span": {
                                        "start": 967,
                                        "end": 975,
                                        "ctxt": 0
                                      },
                                      "typeAnnotation": {
                                        "type": "TsKeywordType",
                                        "span": {
                                          "start": 969,
                                          "end": 975,
                                          "ctxt": 0
                                        },
                                        "kind": "string"
                                      }
                                    }
                                  }
                                ],
                                "typeAnnotation": {
                                  "type": "TsTypeAnnotation",
                                  "span": {
                                    "start": 976,
                                    "end": 986,
                                    "ctxt": 0
                                  },
                                  "typeAnnotation": {
                                    "type": "TsTypeReference",
                                    "span": {
                                      "start": 978,
                                      "end": 986,
                                      "ctxt": 0
                                    },
                                    "typeName": {
                                      "type": "Identifier",
                                      "span": {
                                        "start": 978,
                                        "end": 986,
                                        "ctxt": 0
                                      },
                                      "value": "Derived2",
                                      "optional": false
                                    },
                                    "typeParams": null
                                  }
                                },
                                "readonly": false,
                                "static": false,
                                "span": {
                                  "start": 965,
                                  "end": 987,
                                  "ctxt": 0
                                }
                              }
                            ]
                          }
                        }
                      },
                      "init": null,
                      "definite": false
                    }
                  ]
                },
                {
                  "type": "ExpressionStatement",
                  "span": {
                    "start": 999,
                    "end": 1007,
                    "ctxt": 0
                  },
                  "expression": {
                    "type": "AssignmentExpression",
                    "span": {
                      "start": 999,
                      "end": 1006,
                      "ctxt": 0
                    },
                    "operator": "=",
                    "left": {
                      "type": "Identifier",
                      "span": {
                        "start": 999,
                        "end": 1001,
                        "ctxt": 0
                      },
                      "value": "a3",
                      "optional": false,
                      "typeAnnotation": null
                    },
                    "right": {
                      "type": "Identifier",
                      "span": {
                        "start": 1004,
                        "end": 1006,
                        "ctxt": 0
                      },
                      "value": "b4",
                      "optional": false
                    }
                  }
                },
                {
                  "type": "ExpressionStatement",
                  "span": {
                    "start": 1025,
                    "end": 1033,
                    "ctxt": 0
                  },
                  "expression": {
                    "type": "AssignmentExpression",
                    "span": {
                      "start": 1025,
                      "end": 1032,
                      "ctxt": 0
                    },
                    "operator": "=",
                    "left": {
                      "type": "Identifier",
                      "span": {
                        "start": 1025,
                        "end": 1027,
                        "ctxt": 0
                      },
                      "value": "b4",
                      "optional": false,
                      "typeAnnotation": null
                    },
                    "right": {
                      "type": "Identifier",
                      "span": {
                        "start": 1030,
                        "end": 1032,
                        "ctxt": 0
                      },
                      "value": "a3",
                      "optional": false
                    }
                  }
                }
              ]
            },
            "generator": false,
            "async": false,
            "typeParameters": {
              "type": "TsTypeParameterDeclaration",
              "span": {
                "start": 808,
                "end": 824,
                "ctxt": 0
              },
              "parameters": [
                {
                  "type": "TsTypeParameter",
                  "span": {
                    "start": 809,
                    "end": 823,
                    "ctxt": 0
                  },
                  "name": {
                    "type": "Identifier",
                    "span": {
                      "start": 809,
                      "end": 810,
                      "ctxt": 0
                    },
                    "value": "T",
                    "optional": false
                  },
                  "constraint": {
                    "type": "TsTypeReference",
                    "span": {
                      "start": 819,
                      "end": 823,
                      "ctxt": 0
                    },
                    "typeName": {
                      "type": "Identifier",
                      "span": {
                        "start": 819,
                        "end": 823,
                        "ctxt": 0
                      },
                      "value": "Base",
                      "optional": false
                    },
                    "typeParams": null
                  },
                  "default": null
                }
              ]
            },
            "returnType": null
          }
        ]
      }
    }
  ],
  "interpreter": null
}