1{
2  "type": "Program",
3  "statements": [
4    {
5      "type": "TSInterfaceDeclaration",
6      "body": {
7        "type": "TSInterfaceBody",
8        "body": [],
9        "loc": {
10          "start": {
11            "line": 17,
12            "column": 12
13          },
14          "end": {
15            "line": 17,
16            "column": 14
17          }
18        }
19      },
20      "id": {
21        "type": "Identifier",
22        "name": "I",
23        "loc": {
24          "start": {
25            "line": 17,
26            "column": 11
27          },
28          "end": {
29            "line": 17,
30            "column": 12
31          }
32        }
33      },
34      "extends": [],
35      "loc": {
36        "start": {
37          "line": 17,
38          "column": 1
39        },
40        "end": {
41          "line": 17,
42          "column": 14
43        }
44      }
45    },
46    {
47      "type": "ClassDeclaration",
48      "definition": {
49        "id": {
50          "type": "Identifier",
51          "name": "C",
52          "loc": {
53            "start": {
54              "line": 18,
55              "column": 7
56            },
57            "end": {
58              "line": 18,
59              "column": 8
60            }
61          }
62        },
63        "typeParameters": {
64          "type": "TSTypeParameterDeclaration",
65          "params": [
66            {
67              "type": "TSTypeParameter",
68              "name": {
69                "type": "Identifier",
70                "name": "T",
71                "loc": {
72                  "start": {
73                    "line": 18,
74                    "column": 9
75                  },
76                  "end": {
77                    "line": 18,
78                    "column": 10
79                  }
80                }
81              },
82              "in": false,
83              "out": false,
84              "loc": {
85                "start": {
86                  "line": 18,
87                  "column": 9
88                },
89                "end": {
90                  "line": 18,
91                  "column": 11
92                }
93              }
94            }
95          ],
96          "loc": {
97            "start": {
98              "line": 18,
99              "column": 8
100            },
101            "end": {
102              "line": 18,
103              "column": 11
104            }
105          }
106        },
107        "superClass": null,
108        "implements": [
109          {
110            "type": "TSClassImplements",
111            "expression": {
112              "type": "Identifier",
113              "name": "I",
114              "loc": {
115                "start": {
116                  "line": 18,
117                  "column": 23
118                },
119                "end": {
120                  "line": 18,
121                  "column": 24
122                }
123              }
124            },
125            "loc": {
126              "start": {
127                "line": 18,
128                "column": 23
129              },
130              "end": {
131                "line": 18,
132                "column": 26
133              }
134            }
135          }
136        ],
137        "constructor": {
138          "type": "MethodDefinition",
139          "key": {
140            "type": "Identifier",
141            "name": "constructor",
142            "loc": {
143              "start": {
144                "line": 1,
145                "column": 1
146              },
147              "end": {
148                "line": 1,
149                "column": 1
150              }
151            }
152          },
153          "kind": "constructor",
154          "static": false,
155          "optional": false,
156          "computed": false,
157          "value": {
158            "type": "FunctionExpression",
159            "function": {
160              "type": "ScriptFunction",
161              "id": null,
162              "generator": false,
163              "async": false,
164              "expression": false,
165              "params": [],
166              "body": {
167                "type": "BlockStatement",
168                "statements": [],
169                "loc": {
170                  "start": {
171                    "line": 1,
172                    "column": 1
173                  },
174                  "end": {
175                    "line": 1,
176                    "column": 1
177                  }
178                }
179              },
180              "loc": {
181                "start": {
182                  "line": 1,
183                  "column": 1
184                },
185                "end": {
186                  "line": 1,
187                  "column": 1
188                }
189              }
190            },
191            "loc": {
192              "start": {
193                "line": 1,
194                "column": 1
195              },
196              "end": {
197                "line": 1,
198                "column": 1
199              }
200            }
201          },
202          "overloads": [],
203          "decorators": [],
204          "annotations": [],
205          "loc": {
206            "start": {
207              "line": 18,
208              "column": 1
209            },
210            "end": {
211              "line": 20,
212              "column": 2
213            }
214          }
215        },
216        "body": [],
217        "indexSignatures": [
218          {
219            "type": "TSIndexSignature",
220            "parameters": {
221              "type": "Identifier",
222              "name": "a",
223              "typeAnnotation": {
224                "type": "TSNumberKeyword",
225                "loc": {
226                  "start": {
227                    "line": 19,
228                    "column": 6
229                  },
230                  "end": {
231                    "line": 19,
232                    "column": 12
233                  }
234                }
235              },
236              "loc": {
237                "start": {
238                  "line": 19,
239                  "column": 4
240                },
241                "end": {
242                  "line": 19,
243                  "column": 5
244                }
245              }
246            },
247            "typeAnnotation": {
248              "type": "TSTypeReference",
249              "typeName": {
250                "type": "Identifier",
251                "name": "T",
252                "loc": {
253                  "start": {
254                    "line": 19,
255                    "column": 14
256                  },
257                  "end": {
258                    "line": 19,
259                    "column": 15
260                  }
261                }
262              },
263              "loc": {
264                "start": {
265                  "line": 19,
266                  "column": 14
267                },
268                "end": {
269                  "line": 19,
270                  "column": 15
271                }
272              }
273            },
274            "readonly": false,
275            "static": false,
276            "loc": {
277              "start": {
278                "line": 19,
279                "column": 3
280              },
281              "end": {
282                "line": 19,
283                "column": 15
284              }
285            }
286          }
287        ],
288        "loc": {
289          "start": {
290            "line": 18,
291            "column": 25
292          },
293          "end": {
294            "line": 20,
295            "column": 2
296          }
297        }
298      },
299      "decorators": [],
300      "isAnnotationDeclaration": false,
301      "loc": {
302        "start": {
303          "line": 18,
304          "column": 1
305        },
306        "end": {
307          "line": 20,
308          "column": 2
309        }
310      }
311    },
312    {
313      "type": "ClassDeclaration",
314      "definition": {
315        "id": {
316          "type": "Identifier",
317          "name": "D",
318          "loc": {
319            "start": {
320              "line": 21,
321              "column": 7
322            },
323            "end": {
324              "line": 21,
325              "column": 8
326            }
327          }
328        },
329        "typeParameters": {
330          "type": "TSTypeParameterDeclaration",
331          "params": [
332            {
333              "type": "TSTypeParameter",
334              "name": {
335                "type": "Identifier",
336                "name": "T",
337                "loc": {
338                  "start": {
339                    "line": 21,
340                    "column": 9
341                  },
342                  "end": {
343                    "line": 21,
344                    "column": 10
345                  }
346                }
347              },
348              "in": false,
349              "out": false,
350              "loc": {
351                "start": {
352                  "line": 21,
353                  "column": 9
354                },
355                "end": {
356                  "line": 21,
357                  "column": 11
358                }
359              }
360            }
361          ],
362          "loc": {
363            "start": {
364              "line": 21,
365              "column": 8
366            },
367            "end": {
368              "line": 21,
369              "column": 11
370            }
371          }
372        },
373        "superClass": {
374          "type": "Identifier",
375          "name": "C",
376          "loc": {
377            "start": {
378              "line": 21,
379              "column": 20
380            },
381            "end": {
382              "line": 21,
383              "column": 21
384            }
385          }
386        },
387        "superTypeParameters": {
388          "type": "TSTypeParameterInstantiation",
389          "params": [
390            {
391              "type": "TSTypeReference",
392              "typeName": {
393                "type": "Identifier",
394                "name": "T",
395                "loc": {
396                  "start": {
397                    "line": 21,
398                    "column": 22
399                  },
400                  "end": {
401                    "line": 21,
402                    "column": 23
403                  }
404                }
405              },
406              "loc": {
407                "start": {
408                  "line": 21,
409                  "column": 22
410                },
411                "end": {
412                  "line": 21,
413                  "column": 23
414                }
415              }
416            }
417          ],
418          "loc": {
419            "start": {
420              "line": 21,
421              "column": 21
422            },
423            "end": {
424              "line": 21,
425              "column": 24
426            }
427          }
428        },
429        "implements": [],
430        "constructor": {
431          "type": "MethodDefinition",
432          "key": {
433            "type": "Identifier",
434            "name": "constructor",
435            "loc": {
436              "start": {
437                "line": 1,
438                "column": 1
439              },
440              "end": {
441                "line": 1,
442                "column": 1
443              }
444            }
445          },
446          "kind": "constructor",
447          "static": false,
448          "optional": false,
449          "computed": false,
450          "value": {
451            "type": "FunctionExpression",
452            "function": {
453              "type": "ScriptFunction",
454              "id": null,
455              "generator": false,
456              "async": false,
457              "expression": false,
458              "params": [
459                {
460                  "type": "RestElement",
461                  "argument": {
462                    "type": "Identifier",
463                    "name": "args",
464                    "loc": {
465                      "start": {
466                        "line": 1,
467                        "column": 1
468                      },
469                      "end": {
470                        "line": 1,
471                        "column": 1
472                      }
473                    }
474                  },
475                  "loc": {
476                    "start": {
477                      "line": 1,
478                      "column": 1
479                    },
480                    "end": {
481                      "line": 1,
482                      "column": 1
483                    }
484                  }
485                }
486              ],
487              "body": {
488                "type": "BlockStatement",
489                "statements": [
490                  {
491                    "type": "ExpressionStatement",
492                    "expression": {
493                      "type": "CallExpression",
494                      "callee": {
495                        "type": "Super",
496                        "loc": {
497                          "start": {
498                            "line": 1,
499                            "column": 1
500                          },
501                          "end": {
502                            "line": 1,
503                            "column": 1
504                          }
505                        }
506                      },
507                      "arguments": [
508                        {
509                          "type": "SpreadElement",
510                          "argument": {
511                            "type": "Identifier",
512                            "name": "args",
513                            "loc": {
514                              "start": {
515                                "line": 1,
516                                "column": 1
517                              },
518                              "end": {
519                                "line": 1,
520                                "column": 1
521                              }
522                            }
523                          },
524                          "loc": {
525                            "start": {
526                              "line": 1,
527                              "column": 1
528                            },
529                            "end": {
530                              "line": 1,
531                              "column": 1
532                            }
533                          }
534                        }
535                      ],
536                      "optional": false,
537                      "loc": {
538                        "start": {
539                          "line": 1,
540                          "column": 1
541                        },
542                        "end": {
543                          "line": 1,
544                          "column": 1
545                        }
546                      }
547                    },
548                    "loc": {
549                      "start": {
550                        "line": 1,
551                        "column": 1
552                      },
553                      "end": {
554                        "line": 1,
555                        "column": 1
556                      }
557                    }
558                  }
559                ],
560                "loc": {
561                  "start": {
562                    "line": 1,
563                    "column": 1
564                  },
565                  "end": {
566                    "line": 1,
567                    "column": 1
568                  }
569                }
570              },
571              "loc": {
572                "start": {
573                  "line": 1,
574                  "column": 1
575                },
576                "end": {
577                  "line": 1,
578                  "column": 1
579                }
580              }
581            },
582            "loc": {
583              "start": {
584                "line": 1,
585                "column": 1
586              },
587              "end": {
588                "line": 1,
589                "column": 1
590              }
591            }
592          },
593          "overloads": [],
594          "decorators": [],
595          "annotations": [],
596          "loc": {
597            "start": {
598              "line": 21,
599              "column": 1
600            },
601            "end": {
602              "line": 22,
603              "column": 2
604            }
605          }
606        },
607        "body": [],
608        "indexSignatures": [],
609        "loc": {
610          "start": {
611            "line": 21,
612            "column": 25
613          },
614          "end": {
615            "line": 22,
616            "column": 2
617          }
618        }
619      },
620      "decorators": [],
621      "isAnnotationDeclaration": false,
622      "loc": {
623        "start": {
624          "line": 21,
625          "column": 1
626        },
627        "end": {
628          "line": 22,
629          "column": 2
630        }
631      }
632    }
633  ],
634  "loc": {
635    "start": {
636      "line": 1,
637      "column": 1
638    },
639    "end": {
640      "line": 23,
641      "column": 1
642    }
643  }
644}
645