1{
2  "type": "Program",
3  "statements": [
4    {
5      "type": "ClassDeclaration",
6      "definition": {
7        "id": {
8          "type": "Identifier",
9          "name": "A",
10          "loc": {
11            "start": {
12              "line": 16,
13              "column": 7
14            },
15            "end": {
16              "line": 16,
17              "column": 8
18            }
19          }
20        },
21        "typeParameters": {
22          "type": "TSTypeParameterDeclaration",
23          "params": [
24            {
25              "type": "TSTypeParameter",
26              "name": {
27                "type": "Identifier",
28                "name": "T",
29                "loc": {
30                  "start": {
31                    "line": 16,
32                    "column": 10
33                  },
34                  "end": {
35                    "line": 16,
36                    "column": 11
37                  }
38                }
39              },
40              "in": false,
41              "out": false,
42              "loc": {
43                "start": {
44                  "line": 16,
45                  "column": 10
46                },
47                "end": {
48                  "line": 16,
49                  "column": 12
50                }
51              }
52            }
53          ],
54          "loc": {
55            "start": {
56              "line": 16,
57              "column": 9
58            },
59            "end": {
60              "line": 16,
61              "column": 12
62            }
63          }
64        },
65        "superClass": null,
66        "implements": [],
67        "constructor": {
68          "type": "MethodDefinition",
69          "key": {
70            "type": "Identifier",
71            "name": "constructor",
72            "loc": {
73              "start": {
74                "line": 1,
75                "column": 1
76              },
77              "end": {
78                "line": 1,
79                "column": 1
80              }
81            }
82          },
83          "kind": "constructor",
84          "static": false,
85          "optional": false,
86          "computed": false,
87          "value": {
88            "type": "FunctionExpression",
89            "function": {
90              "type": "ScriptFunction",
91              "id": null,
92              "generator": false,
93              "async": false,
94              "expression": false,
95              "params": [],
96              "body": {
97                "type": "BlockStatement",
98                "statements": [],
99                "loc": {
100                  "start": {
101                    "line": 1,
102                    "column": 1
103                  },
104                  "end": {
105                    "line": 1,
106                    "column": 1
107                  }
108                }
109              },
110              "loc": {
111                "start": {
112                  "line": 1,
113                  "column": 1
114                },
115                "end": {
116                  "line": 1,
117                  "column": 1
118                }
119              }
120            },
121            "loc": {
122              "start": {
123                "line": 1,
124                "column": 1
125              },
126              "end": {
127                "line": 1,
128                "column": 1
129              }
130            }
131          },
132          "overloads": [],
133          "decorators": [],
134          "annotations": [],
135          "loc": {
136            "start": {
137              "line": 16,
138              "column": 1
139            },
140            "end": {
141              "line": 17,
142              "column": 2
143            }
144          }
145        },
146        "body": [],
147        "indexSignatures": [],
148        "loc": {
149          "start": {
150            "line": 16,
151            "column": 13
152          },
153          "end": {
154            "line": 17,
155            "column": 2
156          }
157        }
158      },
159      "decorators": [],
160      "isAnnotationDeclaration": false,
161      "loc": {
162        "start": {
163          "line": 16,
164          "column": 1
165        },
166        "end": {
167          "line": 17,
168          "column": 2
169        }
170      }
171    },
172    {
173      "type": "VariableDeclaration",
174      "declarations": [
175        {
176          "type": "VariableDeclarator",
177          "id": {
178            "type": "Identifier",
179            "name": "a",
180            "typeAnnotation": {
181              "type": "TSTypeReference",
182              "typeName": {
183                "type": "Identifier",
184                "name": "A",
185                "loc": {
186                  "start": {
187                    "line": 19,
188                    "column": 8
189                  },
190                  "end": {
191                    "line": 19,
192                    "column": 9
193                  }
194                }
195              },
196              "typeParameters": {
197                "type": "TSTypeParameterInstantiation",
198                "params": [
199                  {
200                    "type": "TSFunctionType",
201                    "params": [],
202                    "typeParameters": {
203                      "type": "TSTypeParameterDeclaration",
204                      "params": [
205                        {
206                          "type": "TSTypeParameter",
207                          "name": {
208                            "type": "Identifier",
209                            "name": "T",
210                            "loc": {
211                              "start": {
212                                "line": 19,
213                                "column": 11
214                              },
215                              "end": {
216                                "line": 19,
217                                "column": 12
218                              }
219                            }
220                          },
221                          "in": false,
222                          "out": false,
223                          "loc": {
224                            "start": {
225                              "line": 19,
226                              "column": 11
227                            },
228                            "end": {
229                              "line": 19,
230                              "column": 13
231                            }
232                          }
233                        }
234                      ],
235                      "loc": {
236                        "start": {
237                          "line": 19,
238                          "column": 10
239                        },
240                        "end": {
241                          "line": 19,
242                          "column": 13
243                        }
244                      }
245                    },
246                    "returnType": {
247                      "type": "TSTypeLiteral",
248                      "members": [],
249                      "loc": {
250                        "start": {
251                          "line": 19,
252                          "column": 19
253                        },
254                        "end": {
255                          "line": 19,
256                          "column": 21
257                        }
258                      }
259                    },
260                    "loc": {
261                      "start": {
262                        "line": 19,
263                        "column": 10
264                      },
265                      "end": {
266                        "line": 19,
267                        "column": 21
268                      }
269                    }
270                  }
271                ],
272                "loc": {
273                  "start": {
274                    "line": 19,
275                    "column": 9
276                  },
277                  "end": {
278                    "line": 19,
279                    "column": 22
280                  }
281                }
282              },
283              "loc": {
284                "start": {
285                  "line": 19,
286                  "column": 8
287                },
288                "end": {
289                  "line": 19,
290                  "column": 9
291                }
292              }
293            },
294            "loc": {
295              "start": {
296                "line": 19,
297                "column": 5
298              },
299              "end": {
300                "line": 19,
301                "column": 6
302              }
303            }
304          },
305          "init": {
306            "type": "NewExpression",
307            "callee": {
308              "type": "Identifier",
309              "name": "A",
310              "loc": {
311                "start": {
312                  "line": 19,
313                  "column": 29
314                },
315                "end": {
316                  "line": 19,
317                  "column": 30
318                }
319              }
320            },
321            "typeParameters": {
322              "type": "TSTypeParameterInstantiation",
323              "params": [
324                {
325                  "type": "TSFunctionType",
326                  "params": [],
327                  "typeParameters": {
328                    "type": "TSTypeParameterDeclaration",
329                    "params": [
330                      {
331                        "type": "TSTypeParameter",
332                        "name": {
333                          "type": "Identifier",
334                          "name": "T",
335                          "loc": {
336                            "start": {
337                              "line": 19,
338                              "column": 32
339                            },
340                            "end": {
341                              "line": 19,
342                              "column": 33
343                            }
344                          }
345                        },
346                        "in": false,
347                        "out": false,
348                        "loc": {
349                          "start": {
350                            "line": 19,
351                            "column": 32
352                          },
353                          "end": {
354                            "line": 19,
355                            "column": 34
356                          }
357                        }
358                      }
359                    ],
360                    "loc": {
361                      "start": {
362                        "line": 19,
363                        "column": 31
364                      },
365                      "end": {
366                        "line": 19,
367                        "column": 34
368                      }
369                    }
370                  },
371                  "returnType": {
372                    "type": "TSTypeLiteral",
373                    "members": [],
374                    "loc": {
375                      "start": {
376                        "line": 19,
377                        "column": 40
378                      },
379                      "end": {
380                        "line": 19,
381                        "column": 42
382                      }
383                    }
384                  },
385                  "loc": {
386                    "start": {
387                      "line": 19,
388                      "column": 31
389                    },
390                    "end": {
391                      "line": 19,
392                      "column": 42
393                    }
394                  }
395                }
396              ],
397              "loc": {
398                "start": {
399                  "line": 19,
400                  "column": 30
401                },
402                "end": {
403                  "line": 19,
404                  "column": 43
405                }
406              }
407            },
408            "arguments": [],
409            "loc": {
410              "start": {
411                "line": 19,
412                "column": 25
413              },
414              "end": {
415                "line": 19,
416                "column": 45
417              }
418            }
419          },
420          "loc": {
421            "start": {
422              "line": 19,
423              "column": 5
424            },
425            "end": {
426              "line": 19,
427              "column": 45
428            }
429          }
430        }
431      ],
432      "kind": "var",
433      "loc": {
434        "start": {
435          "line": 19,
436          "column": 1
437        },
438        "end": {
439          "line": 19,
440          "column": 45
441        }
442      }
443    }
444  ],
445  "loc": {
446    "start": {
447      "line": 1,
448      "column": 1
449    },
450    "end": {
451      "line": 21,
452      "column": 1
453    }
454  }
455}
456