1{
2  "type": "Program",
3  "statements": [
4    {
5      "type": "FunctionDeclaration",
6      "function": {
7        "type": "ScriptFunction",
8        "id": {
9          "type": "Identifier",
10          "name": "func1",
11          "loc": {
12            "start": {
13              "line": 17,
14              "column": 10
15            },
16            "end": {
17              "line": 17,
18              "column": 15
19            }
20          }
21        },
22        "generator": false,
23        "async": false,
24        "expression": false,
25        "params": [
26          {
27            "type": "Identifier",
28            "name": "arg",
29            "typeAnnotation": {
30              "type": "TSTypeReference",
31              "typeName": {
32                "type": "Identifier",
33                "name": "Type",
34                "loc": {
35                  "start": {
36                    "line": 17,
37                    "column": 59
38                  },
39                  "end": {
40                    "line": 17,
41                    "column": 63
42                  }
43                }
44              },
45              "loc": {
46                "start": {
47                  "line": 17,
48                  "column": 59
49                },
50                "end": {
51                  "line": 17,
52                  "column": 63
53                }
54              }
55            },
56            "loc": {
57              "start": {
58                "line": 17,
59                "column": 54
60              },
61              "end": {
62                "line": 17,
63                "column": 57
64              }
65            }
66          }
67        ],
68        "returnType": {
69          "type": "TSTypeReference",
70          "typeName": {
71            "type": "Identifier",
72            "name": "Type",
73            "loc": {
74              "start": {
75                "line": 17,
76                "column": 66
77              },
78              "end": {
79                "line": 17,
80                "column": 70
81              }
82            }
83          },
84          "loc": {
85            "start": {
86              "line": 17,
87              "column": 66
88            },
89            "end": {
90              "line": 17,
91              "column": 70
92            }
93          }
94        },
95        "typeParameters": {
96          "type": "TSTypeParameterDeclaration",
97          "params": [
98            {
99              "type": "TSTypeParameter",
100              "name": {
101                "type": "Identifier",
102                "name": "Type",
103                "loc": {
104                  "start": {
105                    "line": 17,
106                    "column": 16
107                  },
108                  "end": {
109                    "line": 17,
110                    "column": 20
111                  }
112                }
113              },
114              "in": false,
115              "out": false,
116              "loc": {
117                "start": {
118                  "line": 17,
119                  "column": 16
120                },
121                "end": {
122                  "line": 17,
123                  "column": 21
124                }
125              }
126            },
127            {
128              "type": "TSTypeParameter",
129              "name": {
130                "type": "Identifier",
131                "name": "A",
132                "loc": {
133                  "start": {
134                    "line": 17,
135                    "column": 22
136                  },
137                  "end": {
138                    "line": 17,
139                    "column": 23
140                  }
141                }
142              },
143              "in": false,
144              "out": false,
145              "loc": {
146                "start": {
147                  "line": 17,
148                  "column": 22
149                },
150                "end": {
151                  "line": 17,
152                  "column": 24
153                }
154              }
155            },
156            {
157              "type": "TSTypeParameter",
158              "name": {
159                "type": "Identifier",
160                "name": "B",
161                "loc": {
162                  "start": {
163                    "line": 17,
164                    "column": 25
165                  },
166                  "end": {
167                    "line": 17,
168                    "column": 26
169                  }
170                }
171              },
172              "constraint": {
173                "type": "TSTypeOperator",
174                "operator": "readonly",
175                "typeAnnotation": {
176                  "type": "TSArrayType",
177                  "elementType": {
178                    "type": "TSNumberKeyword",
179                    "loc": {
180                      "start": {
181                        "line": 17,
182                        "column": 44
183                      },
184                      "end": {
185                        "line": 17,
186                        "column": 50
187                      }
188                    }
189                  },
190                  "loc": {
191                    "start": {
192                      "line": 17,
193                      "column": 44
194                    },
195                    "end": {
196                      "line": 17,
197                      "column": 52
198                    }
199                  }
200                },
201                "loc": {
202                  "start": {
203                    "line": 17,
204                    "column": 35
205                  },
206                  "end": {
207                    "line": 17,
208                    "column": 52
209                  }
210                }
211              },
212              "in": false,
213              "out": false,
214              "loc": {
215                "start": {
216                  "line": 17,
217                  "column": 25
218                },
219                "end": {
220                  "line": 17,
221                  "column": 53
222                }
223              }
224            }
225          ],
226          "loc": {
227            "start": {
228              "line": 17,
229              "column": 15
230            },
231            "end": {
232              "line": 17,
233              "column": 53
234            }
235          }
236        },
237        "body": {
238          "type": "BlockStatement",
239          "statements": [
240            {
241              "type": "ReturnStatement",
242              "argument": {
243                "type": "Identifier",
244                "name": "arg",
245                "loc": {
246                  "start": {
247                    "line": 18,
248                    "column": 12
249                  },
250                  "end": {
251                    "line": 18,
252                    "column": 15
253                  }
254                }
255              },
256              "loc": {
257                "start": {
258                  "line": 18,
259                  "column": 5
260                },
261                "end": {
262                  "line": 18,
263                  "column": 16
264                }
265              }
266            }
267          ],
268          "loc": {
269            "start": {
270              "line": 17,
271              "column": 71
272            },
273            "end": {
274              "line": 19,
275              "column": 2
276            }
277          }
278        },
279        "loc": {
280          "start": {
281            "line": 17,
282            "column": 1
283          },
284          "end": {
285            "line": 19,
286            "column": 2
287          }
288        }
289      },
290      "loc": {
291        "start": {
292          "line": 17,
293          "column": 1
294        },
295        "end": {
296          "line": 19,
297          "column": 2
298        }
299      }
300    },
301    {
302      "type": "FunctionDeclaration",
303      "function": {
304        "type": "ScriptFunction",
305        "id": {
306          "type": "Identifier",
307          "name": "func2",
308          "loc": {
309            "start": {
310              "line": 21,
311              "column": 10
312            },
313            "end": {
314              "line": 21,
315              "column": 15
316            }
317          }
318        },
319        "generator": false,
320        "async": false,
321        "expression": false,
322        "params": [],
323        "typeParameters": {
324          "type": "TSTypeParameterDeclaration",
325          "params": [
326            {
327              "type": "TSTypeParameter",
328              "name": {
329                "type": "Identifier",
330                "name": "A",
331                "loc": {
332                  "start": {
333                    "line": 21,
334                    "column": 16
335                  },
336                  "end": {
337                    "line": 21,
338                    "column": 17
339                  }
340                }
341              },
342              "constraint": {
343                "type": "TSTypeLiteral",
344                "members": [
345                  {
346                    "type": "TSPropertySignature",
347                    "computed": false,
348                    "optional": false,
349                    "readonly": false,
350                    "key": {
351                      "type": "Identifier",
352                      "name": "a",
353                      "loc": {
354                        "start": {
355                          "line": 21,
356                          "column": 28
357                        },
358                        "end": {
359                          "line": 21,
360                          "column": 29
361                        }
362                      }
363                    },
364                    "typeAnnotation": {
365                      "type": "TSNumberKeyword",
366                      "loc": {
367                        "start": {
368                          "line": 21,
369                          "column": 31
370                        },
371                        "end": {
372                          "line": 21,
373                          "column": 37
374                        }
375                      }
376                    },
377                    "loc": {
378                      "start": {
379                        "line": 21,
380                        "column": 28
381                      },
382                      "end": {
383                        "line": 21,
384                        "column": 38
385                      }
386                    }
387                  },
388                  {
389                    "type": "TSPropertySignature",
390                    "computed": false,
391                    "optional": false,
392                    "readonly": false,
393                    "key": {
394                      "type": "Identifier",
395                      "name": "b",
396                      "loc": {
397                        "start": {
398                          "line": 21,
399                          "column": 39
400                        },
401                        "end": {
402                          "line": 21,
403                          "column": 40
404                        }
405                      }
406                    },
407                    "typeAnnotation": {
408                      "type": "TSStringKeyword",
409                      "loc": {
410                        "start": {
411                          "line": 21,
412                          "column": 42
413                        },
414                        "end": {
415                          "line": 21,
416                          "column": 48
417                        }
418                      }
419                    },
420                    "loc": {
421                      "start": {
422                        "line": 21,
423                        "column": 39
424                      },
425                      "end": {
426                        "line": 21,
427                        "column": 50
428                      }
429                    }
430                  }
431                ],
432                "loc": {
433                  "start": {
434                    "line": 21,
435                    "column": 26
436                  },
437                  "end": {
438                    "line": 21,
439                    "column": 50
440                  }
441                }
442              },
443              "in": false,
444              "out": false,
445              "loc": {
446                "start": {
447                  "line": 21,
448                  "column": 16
449                },
450                "end": {
451                  "line": 21,
452                  "column": 51
453                }
454              }
455            }
456          ],
457          "loc": {
458            "start": {
459              "line": 21,
460              "column": 15
461            },
462            "end": {
463              "line": 21,
464              "column": 51
465            }
466          }
467        },
468        "body": {
469          "type": "BlockStatement",
470          "statements": [],
471          "loc": {
472            "start": {
473              "line": 21,
474              "column": 54
475            },
476            "end": {
477              "line": 21,
478              "column": 57
479            }
480          }
481        },
482        "loc": {
483          "start": {
484            "line": 21,
485            "column": 1
486          },
487          "end": {
488            "line": 21,
489            "column": 57
490          }
491        }
492      },
493      "loc": {
494        "start": {
495          "line": 21,
496          "column": 1
497        },
498        "end": {
499          "line": 21,
500          "column": 57
501        }
502      }
503    },
504    {
505      "type": "FunctionDeclaration",
506      "function": {
507        "type": "ScriptFunction",
508        "id": {
509          "type": "Identifier",
510          "name": "func3",
511          "loc": {
512            "start": {
513              "line": 23,
514              "column": 10
515            },
516            "end": {
517              "line": 23,
518              "column": 15
519            }
520          }
521        },
522        "generator": false,
523        "async": false,
524        "expression": false,
525        "params": [
526          {
527            "type": "Identifier",
528            "name": "a",
529            "typeAnnotation": {
530              "type": "TSTypeReference",
531              "typeName": {
532                "type": "Identifier",
533                "name": "A",
534                "loc": {
535                  "start": {
536                    "line": 23,
537                    "column": 90
538                  },
539                  "end": {
540                    "line": 23,
541                    "column": 91
542                  }
543                }
544              },
545              "loc": {
546                "start": {
547                  "line": 23,
548                  "column": 90
549                },
550                "end": {
551                  "line": 23,
552                  "column": 91
553                }
554              }
555            },
556            "loc": {
557              "start": {
558                "line": 23,
559                "column": 87
560              },
561              "end": {
562                "line": 23,
563                "column": 88
564              }
565            }
566          },
567          {
568            "type": "Identifier",
569            "name": "b",
570            "typeAnnotation": {
571              "type": "TSStringKeyword",
572              "loc": {
573                "start": {
574                  "line": 23,
575                  "column": 96
576                },
577                "end": {
578                  "line": 23,
579                  "column": 102
580                }
581              }
582            },
583            "loc": {
584              "start": {
585                "line": 23,
586                "column": 93
587              },
588              "end": {
589                "line": 23,
590                "column": 94
591              }
592            }
593          }
594        ],
595        "returnType": {
596          "type": "TSUnionType",
597          "types": [
598            {
599              "type": "TSNumberKeyword",
600              "loc": {
601                "start": {
602                  "line": 23,
603                  "column": 105
604                },
605                "end": {
606                  "line": 23,
607                  "column": 111
608                }
609              }
610            },
611            {
612              "type": "TSBooleanKeyword",
613              "loc": {
614                "start": {
615                  "line": 23,
616                  "column": 114
617                },
618                "end": {
619                  "line": 23,
620                  "column": 121
621                }
622              }
623            }
624          ],
625          "loc": {
626            "start": {
627              "line": 23,
628              "column": 105
629            },
630            "end": {
631              "line": 23,
632              "column": 121
633            }
634          }
635        },
636        "typeParameters": {
637          "type": "TSTypeParameterDeclaration",
638          "params": [
639            {
640              "type": "TSTypeParameter",
641              "name": {
642                "type": "Identifier",
643                "name": "A",
644                "loc": {
645                  "start": {
646                    "line": 23,
647                    "column": 16
648                  },
649                  "end": {
650                    "line": 23,
651                    "column": 17
652                  }
653                }
654              },
655              "constraint": {
656                "type": "TSTypeOperator",
657                "operator": "keyof",
658                "typeAnnotation": {
659                  "type": "TSTypeLiteral",
660                  "members": [
661                    {
662                      "type": "TSPropertySignature",
663                      "computed": false,
664                      "optional": false,
665                      "readonly": false,
666                      "key": {
667                        "type": "Identifier",
668                        "name": "a",
669                        "loc": {
670                          "start": {
671                            "line": 23,
672                            "column": 34
673                          },
674                          "end": {
675                            "line": 23,
676                            "column": 35
677                          }
678                        }
679                      },
680                      "typeAnnotation": {
681                        "type": "TSTypeLiteral",
682                        "members": [
683                          {
684                            "type": "TSPropertySignature",
685                            "computed": false,
686                            "optional": false,
687                            "readonly": false,
688                            "key": {
689                              "type": "Identifier",
690                              "name": "b",
691                              "loc": {
692                                "start": {
693                                  "line": 23,
694                                  "column": 39
695                                },
696                                "end": {
697                                  "line": 23,
698                                  "column": 40
699                                }
700                              }
701                            },
702                            "typeAnnotation": {
703                              "type": "TSNumberKeyword",
704                              "loc": {
705                                "start": {
706                                  "line": 23,
707                                  "column": 42
708                                },
709                                "end": {
710                                  "line": 23,
711                                  "column": 48
712                                }
713                              }
714                            },
715                            "loc": {
716                              "start": {
717                                "line": 23,
718                                "column": 39
719                              },
720                              "end": {
721                                "line": 23,
722                                "column": 49
723                              }
724                            }
725                          },
726                          {
727                            "type": "TSPropertySignature",
728                            "computed": false,
729                            "optional": false,
730                            "readonly": false,
731                            "key": {
732                              "type": "Identifier",
733                              "name": "c",
734                              "loc": {
735                                "start": {
736                                  "line": 23,
737                                  "column": 50
738                                },
739                                "end": {
740                                  "line": 23,
741                                  "column": 51
742                                }
743                              }
744                            },
745                            "typeAnnotation": {
746                              "type": "TSBooleanKeyword",
747                              "loc": {
748                                "start": {
749                                  "line": 23,
750                                  "column": 53
751                                },
752                                "end": {
753                                  "line": 23,
754                                  "column": 60
755                                }
756                              }
757                            },
758                            "loc": {
759                              "start": {
760                                "line": 23,
761                                "column": 50
762                              },
763                              "end": {
764                                "line": 23,
765                                "column": 62
766                              }
767                            }
768                          }
769                        ],
770                        "loc": {
771                          "start": {
772                            "line": 23,
773                            "column": 37
774                          },
775                          "end": {
776                            "line": 23,
777                            "column": 62
778                          }
779                        }
780                      },
781                      "loc": {
782                        "start": {
783                          "line": 23,
784                          "column": 34
785                        },
786                        "end": {
787                          "line": 23,
788                          "column": 63
789                        }
790                      }
791                    },
792                    {
793                      "type": "TSPropertySignature",
794                      "computed": false,
795                      "optional": false,
796                      "readonly": false,
797                      "key": {
798                        "type": "Identifier",
799                        "name": "b",
800                        "loc": {
801                          "start": {
802                            "line": 23,
803                            "column": 64
804                          },
805                          "end": {
806                            "line": 23,
807                            "column": 65
808                          }
809                        }
810                      },
811                      "typeAnnotation": {
812                        "type": "TSTupleType",
813                        "elementTypes": [
814                          {
815                            "type": "TSNumberKeyword",
816                            "loc": {
817                              "start": {
818                                "line": 23,
819                                "column": 68
820                              },
821                              "end": {
822                                "line": 23,
823                                "column": 74
824                              }
825                            }
826                          },
827                          {
828                            "type": "TSStringKeyword",
829                            "loc": {
830                              "start": {
831                                "line": 23,
832                                "column": 76
833                              },
834                              "end": {
835                                "line": 23,
836                                "column": 82
837                              }
838                            }
839                          }
840                        ],
841                        "loc": {
842                          "start": {
843                            "line": 23,
844                            "column": 67
845                          },
846                          "end": {
847                            "line": 23,
848                            "column": 83
849                          }
850                        }
851                      },
852                      "loc": {
853                        "start": {
854                          "line": 23,
855                          "column": 64
856                        },
857                        "end": {
858                          "line": 23,
859                          "column": 85
860                        }
861                      }
862                    }
863                  ],
864                  "loc": {
865                    "start": {
866                      "line": 23,
867                      "column": 32
868                    },
869                    "end": {
870                      "line": 23,
871                      "column": 85
872                    }
873                  }
874                },
875                "loc": {
876                  "start": {
877                    "line": 23,
878                    "column": 26
879                  },
880                  "end": {
881                    "line": 23,
882                    "column": 85
883                  }
884                }
885              },
886              "in": false,
887              "out": false,
888              "loc": {
889                "start": {
890                  "line": 23,
891                  "column": 16
892                },
893                "end": {
894                  "line": 23,
895                  "column": 86
896                }
897              }
898            }
899          ],
900          "loc": {
901            "start": {
902              "line": 23,
903              "column": 15
904            },
905            "end": {
906              "line": 23,
907              "column": 86
908            }
909          }
910        },
911        "body": {
912          "type": "BlockStatement",
913          "statements": [
914            {
915              "type": "ReturnStatement",
916              "argument": {
917                "type": "BooleanLiteral",
918                "value": true,
919                "loc": {
920                  "start": {
921                    "line": 24,
922                    "column": 12
923                  },
924                  "end": {
925                    "line": 24,
926                    "column": 16
927                  }
928                }
929              },
930              "loc": {
931                "start": {
932                  "line": 24,
933                  "column": 5
934                },
935                "end": {
936                  "line": 24,
937                  "column": 17
938                }
939              }
940            }
941          ],
942          "loc": {
943            "start": {
944              "line": 23,
945              "column": 122
946            },
947            "end": {
948              "line": 25,
949              "column": 2
950            }
951          }
952        },
953        "loc": {
954          "start": {
955            "line": 23,
956            "column": 1
957          },
958          "end": {
959            "line": 25,
960            "column": 2
961          }
962        }
963      },
964      "loc": {
965        "start": {
966          "line": 23,
967          "column": 1
968        },
969        "end": {
970          "line": 25,
971          "column": 2
972        }
973      }
974    },
975    {
976      "type": "TSTypeAliasDeclaration",
977      "id": {
978        "type": "Identifier",
979        "name": "PromiseConstructorLike",
980        "loc": {
981          "start": {
982            "line": 27,
983            "column": 14
984          },
985          "end": {
986            "line": 27,
987            "column": 36
988          }
989        }
990      },
991      "typeAnnotation": {
992        "type": "TSConstructorType",
993        "params": [
994          {
995            "type": "Identifier",
996            "name": "executor",
997            "typeAnnotation": {
998              "type": "TSFunctionType",
999              "params": [
1000                {
1001                  "type": "Identifier",
1002                  "name": "resolve",
1003                  "typeAnnotation": {
1004                    "type": "TSFunctionType",
1005                    "params": [
1006                      {
1007                        "type": "Identifier",
1008                        "name": "value",
1009                        "typeAnnotation": {
1010                          "type": "TSUnionType",
1011                          "types": [
1012                            {
1013                              "type": "TSTypeReference",
1014                              "typeName": {
1015                                "type": "Identifier",
1016                                "name": "T",
1017                                "loc": {
1018                                  "start": {
1019                                    "line": 27,
1020                                    "column": 75
1021                                  },
1022                                  "end": {
1023                                    "line": 27,
1024                                    "column": 76
1025                                  }
1026                                }
1027                              },
1028                              "loc": {
1029                                "start": {
1030                                  "line": 27,
1031                                  "column": 75
1032                                },
1033                                "end": {
1034                                  "line": 27,
1035                                  "column": 76
1036                                }
1037                              }
1038                            },
1039                            {
1040                              "type": "TSTypeReference",
1041                              "typeName": {
1042                                "type": "Identifier",
1043                                "name": "PromiseLike",
1044                                "loc": {
1045                                  "start": {
1046                                    "line": 27,
1047                                    "column": 79
1048                                  },
1049                                  "end": {
1050                                    "line": 27,
1051                                    "column": 90
1052                                  }
1053                                }
1054                              },
1055                              "typeParameters": {
1056                                "type": "TSTypeParameterInstantiation",
1057                                "params": [
1058                                  {
1059                                    "type": "TSTypeReference",
1060                                    "typeName": {
1061                                      "type": "Identifier",
1062                                      "name": "T",
1063                                      "loc": {
1064                                        "start": {
1065                                          "line": 27,
1066                                          "column": 91
1067                                        },
1068                                        "end": {
1069                                          "line": 27,
1070                                          "column": 92
1071                                        }
1072                                      }
1073                                    },
1074                                    "loc": {
1075                                      "start": {
1076                                        "line": 27,
1077                                        "column": 91
1078                                      },
1079                                      "end": {
1080                                        "line": 27,
1081                                        "column": 92
1082                                      }
1083                                    }
1084                                  }
1085                                ],
1086                                "loc": {
1087                                  "start": {
1088                                    "line": 27,
1089                                    "column": 90
1090                                  },
1091                                  "end": {
1092                                    "line": 27,
1093                                    "column": 93
1094                                  }
1095                                }
1096                              },
1097                              "loc": {
1098                                "start": {
1099                                  "line": 27,
1100                                  "column": 79
1101                                },
1102                                "end": {
1103                                  "line": 27,
1104                                  "column": 90
1105                                }
1106                              }
1107                            }
1108                          ],
1109                          "loc": {
1110                            "start": {
1111                              "line": 27,
1112                              "column": 75
1113                            },
1114                            "end": {
1115                              "line": 27,
1116                              "column": 90
1117                            }
1118                          }
1119                        },
1120                        "loc": {
1121                          "start": {
1122                            "line": 27,
1123                            "column": 68
1124                          },
1125                          "end": {
1126                            "line": 27,
1127                            "column": 73
1128                          }
1129                        }
1130                      }
1131                    ],
1132                    "returnType": {
1133                      "type": "TSVoidKeyword",
1134                      "loc": {
1135                        "start": {
1136                          "line": 27,
1137                          "column": 98
1138                        },
1139                        "end": {
1140                          "line": 27,
1141                          "column": 102
1142                        }
1143                      }
1144                    },
1145                    "loc": {
1146                      "start": {
1147                        "line": 27,
1148                        "column": 67
1149                      },
1150                      "end": {
1151                        "line": 27,
1152                        "column": 102
1153                      }
1154                    }
1155                  },
1156                  "loc": {
1157                    "start": {
1158                      "line": 27,
1159                      "column": 58
1160                    },
1161                    "end": {
1162                      "line": 27,
1163                      "column": 65
1164                    }
1165                  }
1166                },
1167                {
1168                  "type": "Identifier",
1169                  "name": "reject",
1170                  "typeAnnotation": {
1171                    "type": "TSFunctionType",
1172                    "params": [
1173                      {
1174                        "type": "Identifier",
1175                        "name": "reason",
1176                        "typeAnnotation": {
1177                          "type": "TSAnyKeyword",
1178                          "loc": {
1179                            "start": {
1180                              "line": 27,
1181                              "column": 122
1182                            },
1183                            "end": {
1184                              "line": 27,
1185                              "column": 125
1186                            }
1187                          }
1188                        },
1189                        "optional": true,
1190                        "loc": {
1191                          "start": {
1192                            "line": 27,
1193                            "column": 113
1194                          },
1195                          "end": {
1196                            "line": 27,
1197                            "column": 119
1198                          }
1199                        }
1200                      }
1201                    ],
1202                    "returnType": {
1203                      "type": "TSVoidKeyword",
1204                      "loc": {
1205                        "start": {
1206                          "line": 27,
1207                          "column": 130
1208                        },
1209                        "end": {
1210                          "line": 27,
1211                          "column": 134
1212                        }
1213                      }
1214                    },
1215                    "loc": {
1216                      "start": {
1217                        "line": 27,
1218                        "column": 112
1219                      },
1220                      "end": {
1221                        "line": 27,
1222                        "column": 134
1223                      }
1224                    }
1225                  },
1226                  "loc": {
1227                    "start": {
1228                      "line": 27,
1229                      "column": 104
1230                    },
1231                    "end": {
1232                      "line": 27,
1233                      "column": 110
1234                    }
1235                  }
1236                }
1237              ],
1238              "returnType": {
1239                "type": "TSVoidKeyword",
1240                "loc": {
1241                  "start": {
1242                    "line": 27,
1243                    "column": 139
1244                  },
1245                  "end": {
1246                    "line": 27,
1247                    "column": 143
1248                  }
1249                }
1250              },
1251              "loc": {
1252                "start": {
1253                  "line": 27,
1254                  "column": 57
1255                },
1256                "end": {
1257                  "line": 27,
1258                  "column": 143
1259                }
1260              }
1261            },
1262            "loc": {
1263              "start": {
1264                "line": 27,
1265                "column": 47
1266              },
1267              "end": {
1268                "line": 27,
1269                "column": 55
1270              }
1271            }
1272          }
1273        ],
1274        "typeParameters": {
1275          "type": "TSTypeParameterDeclaration",
1276          "params": [
1277            {
1278              "type": "TSTypeParameter",
1279              "name": {
1280                "type": "Identifier",
1281                "name": "T",
1282                "loc": {
1283                  "start": {
1284                    "line": 27,
1285                    "column": 44
1286                  },
1287                  "end": {
1288                    "line": 27,
1289                    "column": 45
1290                  }
1291                }
1292              },
1293              "in": false,
1294              "out": false,
1295              "loc": {
1296                "start": {
1297                  "line": 27,
1298                  "column": 44
1299                },
1300                "end": {
1301                  "line": 27,
1302                  "column": 46
1303                }
1304              }
1305            }
1306          ],
1307          "loc": {
1308            "start": {
1309              "line": 27,
1310              "column": 43
1311            },
1312            "end": {
1313              "line": 27,
1314              "column": 46
1315            }
1316          }
1317        },
1318        "returnType": {
1319          "type": "TSTypeReference",
1320          "typeName": {
1321            "type": "Identifier",
1322            "name": "PromiseLike",
1323            "loc": {
1324              "start": {
1325                "line": 27,
1326                "column": 148
1327              },
1328              "end": {
1329                "line": 27,
1330                "column": 159
1331              }
1332            }
1333          },
1334          "typeParameters": {
1335            "type": "TSTypeParameterInstantiation",
1336            "params": [
1337              {
1338                "type": "TSTypeReference",
1339                "typeName": {
1340                  "type": "Identifier",
1341                  "name": "T",
1342                  "loc": {
1343                    "start": {
1344                      "line": 27,
1345                      "column": 160
1346                    },
1347                    "end": {
1348                      "line": 27,
1349                      "column": 161
1350                    }
1351                  }
1352                },
1353                "loc": {
1354                  "start": {
1355                    "line": 27,
1356                    "column": 160
1357                  },
1358                  "end": {
1359                    "line": 27,
1360                    "column": 161
1361                  }
1362                }
1363              }
1364            ],
1365            "loc": {
1366              "start": {
1367                "line": 27,
1368                "column": 159
1369              },
1370              "end": {
1371                "line": 27,
1372                "column": 162
1373              }
1374            }
1375          },
1376          "loc": {
1377            "start": {
1378              "line": 27,
1379              "column": 148
1380            },
1381            "end": {
1382              "line": 27,
1383              "column": 159
1384            }
1385          }
1386        },
1387        "loc": {
1388          "start": {
1389            "line": 27,
1390            "column": 39
1391          },
1392          "end": {
1393            "line": 27,
1394            "column": 159
1395          }
1396        }
1397      },
1398      "declare": true,
1399      "loc": {
1400        "start": {
1401          "line": 27,
1402          "column": 9
1403        },
1404        "end": {
1405          "line": 27,
1406          "column": 163
1407        }
1408      }
1409    },
1410    {
1411      "type": "TSInterfaceDeclaration",
1412      "body": {
1413        "type": "TSInterfaceBody",
1414        "body": [
1415          {
1416            "type": "TSPropertySignature",
1417            "computed": false,
1418            "optional": false,
1419            "readonly": false,
1420            "key": {
1421              "type": "Identifier",
1422              "name": "a",
1423              "loc": {
1424                "start": {
1425                  "line": 30,
1426                  "column": 5
1427                },
1428                "end": {
1429                  "line": 30,
1430                  "column": 6
1431                }
1432              }
1433            },
1434            "typeAnnotation": {
1435              "type": "TSNumberKeyword",
1436              "loc": {
1437                "start": {
1438                  "line": 30,
1439                  "column": 8
1440                },
1441                "end": {
1442                  "line": 30,
1443                  "column": 14
1444                }
1445              }
1446            },
1447            "loc": {
1448              "start": {
1449                "line": 30,
1450                "column": 5
1451              },
1452              "end": {
1453                "line": 30,
1454                "column": 15
1455              }
1456            }
1457          },
1458          {
1459            "type": "TSIndexSignature",
1460            "parameters": {
1461              "type": "Identifier",
1462              "name": "x",
1463              "typeAnnotation": {
1464                "type": "TSStringKeyword",
1465                "loc": {
1466                  "start": {
1467                    "line": 31,
1468                    "column": 9
1469                  },
1470                  "end": {
1471                    "line": 31,
1472                    "column": 15
1473                  }
1474                }
1475              },
1476              "loc": {
1477                "start": {
1478                  "line": 31,
1479                  "column": 6
1480                },
1481                "end": {
1482                  "line": 31,
1483                  "column": 7
1484                }
1485              }
1486            },
1487            "typeAnnotation": {
1488              "type": "TSUnionType",
1489              "types": [
1490                {
1491                  "type": "TSBooleanKeyword",
1492                  "loc": {
1493                    "start": {
1494                      "line": 31,
1495                      "column": 18
1496                    },
1497                    "end": {
1498                      "line": 31,
1499                      "column": 25
1500                    }
1501                  }
1502                },
1503                {
1504                  "type": "TSNumberKeyword",
1505                  "loc": {
1506                    "start": {
1507                      "line": 31,
1508                      "column": 28
1509                    },
1510                    "end": {
1511                      "line": 31,
1512                      "column": 34
1513                    }
1514                  }
1515                }
1516              ],
1517              "loc": {
1518                "start": {
1519                  "line": 31,
1520                  "column": 18
1521                },
1522                "end": {
1523                  "line": 31,
1524                  "column": 34
1525                }
1526              }
1527            },
1528            "readonly": false,
1529            "static": false,
1530            "loc": {
1531              "start": {
1532                "line": 31,
1533                "column": 5
1534              },
1535              "end": {
1536                "line": 31,
1537                "column": 35
1538              }
1539            }
1540          }
1541        ],
1542        "loc": {
1543          "start": {
1544            "line": 29,
1545            "column": 53
1546          },
1547          "end": {
1548            "line": 32,
1549            "column": 2
1550          }
1551        }
1552      },
1553      "id": {
1554        "type": "Identifier",
1555        "name": "R",
1556        "loc": {
1557          "start": {
1558            "line": 29,
1559            "column": 11
1560          },
1561          "end": {
1562            "line": 29,
1563            "column": 12
1564          }
1565        }
1566      },
1567      "extends": [],
1568      "typeParameters": {
1569        "type": "TSTypeParameterDeclaration",
1570        "params": [
1571          {
1572            "type": "TSTypeParameter",
1573            "name": {
1574              "type": "Identifier",
1575              "name": "K",
1576              "loc": {
1577                "start": {
1578                  "line": 29,
1579                  "column": 13
1580                },
1581                "end": {
1582                  "line": 29,
1583                  "column": 14
1584                }
1585              }
1586            },
1587            "constraint": {
1588              "type": "TSTupleType",
1589              "elementTypes": [
1590                {
1591                  "type": "TSNumberKeyword",
1592                  "loc": {
1593                    "start": {
1594                      "line": 29,
1595                      "column": 24
1596                    },
1597                    "end": {
1598                      "line": 29,
1599                      "column": 30
1600                    }
1601                  }
1602                },
1603                {
1604                  "type": "TSStringKeyword",
1605                  "loc": {
1606                    "start": {
1607                      "line": 29,
1608                      "column": 32
1609                    },
1610                    "end": {
1611                      "line": 29,
1612                      "column": 38
1613                    }
1614                  }
1615                }
1616              ],
1617              "loc": {
1618                "start": {
1619                  "line": 29,
1620                  "column": 23
1621                },
1622                "end": {
1623                  "line": 29,
1624                  "column": 39
1625                }
1626              }
1627            },
1628            "in": false,
1629            "out": false,
1630            "loc": {
1631              "start": {
1632                "line": 29,
1633                "column": 13
1634              },
1635              "end": {
1636                "line": 29,
1637                "column": 40
1638              }
1639            }
1640          },
1641          {
1642            "type": "TSTypeParameter",
1643            "name": {
1644              "type": "Identifier",
1645              "name": "T",
1646              "loc": {
1647                "start": {
1648                  "line": 29,
1649                  "column": 41
1650                },
1651                "end": {
1652                  "line": 29,
1653                  "column": 42
1654                }
1655              }
1656            },
1657            "default": {
1658              "type": "TSStringKeyword",
1659              "loc": {
1660                "start": {
1661                  "line": 29,
1662                  "column": 45
1663                },
1664                "end": {
1665                  "line": 29,
1666                  "column": 51
1667                }
1668              }
1669            },
1670            "in": false,
1671            "out": false,
1672            "loc": {
1673              "start": {
1674                "line": 29,
1675                "column": 41
1676              },
1677              "end": {
1678                "line": 29,
1679                "column": 52
1680              }
1681            }
1682          }
1683        ],
1684        "loc": {
1685          "start": {
1686            "line": 29,
1687            "column": 12
1688          },
1689          "end": {
1690            "line": 29,
1691            "column": 52
1692          }
1693        }
1694      },
1695      "loc": {
1696        "start": {
1697          "line": 29,
1698          "column": 1
1699        },
1700        "end": {
1701          "line": 32,
1702          "column": 2
1703        }
1704      }
1705    },
1706    {
1707      "type": "TSInterfaceDeclaration",
1708      "body": {
1709        "type": "TSInterfaceBody",
1710        "body": [
1711          {
1712            "type": "TSCallSignatureDeclaration",
1713            "params": [],
1714            "typeParameters": {
1715              "type": "TSTypeParameterDeclaration",
1716              "params": [
1717                {
1718                  "type": "TSTypeParameter",
1719                  "name": {
1720                    "type": "Identifier",
1721                    "name": "A",
1722                    "loc": {
1723                      "start": {
1724                        "line": 35,
1725                        "column": 6
1726                      },
1727                      "end": {
1728                        "line": 35,
1729                        "column": 7
1730                      }
1731                    }
1732                  },
1733                  "in": false,
1734                  "out": false,
1735                  "loc": {
1736                    "start": {
1737                      "line": 35,
1738                      "column": 6
1739                    },
1740                    "end": {
1741                      "line": 35,
1742                      "column": 8
1743                    }
1744                  }
1745                }
1746              ],
1747              "loc": {
1748                "start": {
1749                  "line": 35,
1750                  "column": 5
1751                },
1752                "end": {
1753                  "line": 35,
1754                  "column": 8
1755                }
1756              }
1757            },
1758            "returnType": {
1759              "type": "TSNumberKeyword",
1760              "loc": {
1761                "start": {
1762                  "line": 35,
1763                  "column": 12
1764                },
1765                "end": {
1766                  "line": 35,
1767                  "column": 18
1768                }
1769              }
1770            },
1771            "loc": {
1772              "start": {
1773                "line": 35,
1774                "column": 5
1775              },
1776              "end": {
1777                "line": 35,
1778                "column": 19
1779              }
1780            }
1781          },
1782          {
1783            "type": "TSMethodSignature",
1784            "computed": false,
1785            "optional": false,
1786            "isGetAccessor": false,
1787            "isSetAccessor": false,
1788            "key": {
1789              "type": "Identifier",
1790              "name": "readonly",
1791              "loc": {
1792                "start": {
1793                  "line": 36,
1794                  "column": 5
1795                },
1796                "end": {
1797                  "line": 36,
1798                  "column": 13
1799                }
1800              }
1801            },
1802            "params": [],
1803            "typeParameters": {
1804              "type": "TSTypeParameterDeclaration",
1805              "params": [
1806                {
1807                  "type": "TSTypeParameter",
1808                  "name": {
1809                    "type": "Identifier",
1810                    "name": "A",
1811                    "loc": {
1812                      "start": {
1813                        "line": 36,
1814                        "column": 14
1815                      },
1816                      "end": {
1817                        "line": 36,
1818                        "column": 15
1819                      }
1820                    }
1821                  },
1822                  "constraint": {
1823                    "type": "TSNumberKeyword",
1824                    "loc": {
1825                      "start": {
1826                        "line": 36,
1827                        "column": 24
1828                      },
1829                      "end": {
1830                        "line": 36,
1831                        "column": 30
1832                      }
1833                    }
1834                  },
1835                  "in": false,
1836                  "out": false,
1837                  "loc": {
1838                    "start": {
1839                      "line": 36,
1840                      "column": 14
1841                    },
1842                    "end": {
1843                      "line": 36,
1844                      "column": 31
1845                    }
1846                  }
1847                }
1848              ],
1849              "loc": {
1850                "start": {
1851                  "line": 36,
1852                  "column": 13
1853                },
1854                "end": {
1855                  "line": 36,
1856                  "column": 31
1857                }
1858              }
1859            },
1860            "typeAnnotation": {
1861              "type": "TSTupleType",
1862              "elementTypes": [
1863                {
1864                  "type": "TSBooleanKeyword",
1865                  "loc": {
1866                    "start": {
1867                      "line": 36,
1868                      "column": 36
1869                    },
1870                    "end": {
1871                      "line": 36,
1872                      "column": 43
1873                    }
1874                  }
1875                },
1876                {
1877                  "type": "TSArrayType",
1878                  "elementType": {
1879                    "type": "TSNumberKeyword",
1880                    "loc": {
1881                      "start": {
1882                        "line": 36,
1883                        "column": 45
1884                      },
1885                      "end": {
1886                        "line": 36,
1887                        "column": 51
1888                      }
1889                    }
1890                  },
1891                  "loc": {
1892                    "start": {
1893                      "line": 36,
1894                      "column": 45
1895                    },
1896                    "end": {
1897                      "line": 36,
1898                      "column": 53
1899                    }
1900                  }
1901                }
1902              ],
1903              "loc": {
1904                "start": {
1905                  "line": 36,
1906                  "column": 35
1907                },
1908                "end": {
1909                  "line": 36,
1910                  "column": 54
1911                }
1912              }
1913            },
1914            "loc": {
1915              "start": {
1916                "line": 36,
1917                "column": 5
1918              },
1919              "end": {
1920                "line": 36,
1921                "column": 55
1922              }
1923            }
1924          }
1925        ],
1926        "loc": {
1927          "start": {
1928            "line": 34,
1929            "column": 117
1930          },
1931          "end": {
1932            "line": 37,
1933            "column": 2
1934          }
1935        }
1936      },
1937      "id": {
1938        "type": "Identifier",
1939        "name": "U",
1940        "loc": {
1941          "start": {
1942            "line": 34,
1943            "column": 11
1944          },
1945          "end": {
1946            "line": 34,
1947            "column": 12
1948          }
1949        }
1950      },
1951      "extends": [
1952        {
1953          "type": "TSInterfaceHeritage",
1954          "expression": {
1955            "type": "TSTypeReference",
1956            "typeName": {
1957              "type": "Identifier",
1958              "name": "R",
1959              "loc": {
1960                "start": {
1961                  "line": 34,
1962                  "column": 97
1963                },
1964                "end": {
1965                  "line": 34,
1966                  "column": 98
1967                }
1968              }
1969            },
1970            "typeParameters": {
1971              "type": "TSTypeParameterInstantiation",
1972              "params": [
1973                {
1974                  "type": "TSTupleType",
1975                  "elementTypes": [
1976                    {
1977                      "type": "TSNumberKeyword",
1978                      "loc": {
1979                        "start": {
1980                          "line": 34,
1981                          "column": 100
1982                        },
1983                        "end": {
1984                          "line": 34,
1985                          "column": 106
1986                        }
1987                      }
1988                    },
1989                    {
1990                      "type": "TSStringKeyword",
1991                      "loc": {
1992                        "start": {
1993                          "line": 34,
1994                          "column": 108
1995                        },
1996                        "end": {
1997                          "line": 34,
1998                          "column": 114
1999                        }
2000                      }
2001                    }
2002                  ],
2003                  "loc": {
2004                    "start": {
2005                      "line": 34,
2006                      "column": 99
2007                    },
2008                    "end": {
2009                      "line": 34,
2010                      "column": 115
2011                    }
2012                  }
2013                }
2014              ],
2015              "loc": {
2016                "start": {
2017                  "line": 34,
2018                  "column": 98
2019                },
2020                "end": {
2021                  "line": 34,
2022                  "column": 116
2023                }
2024              }
2025            },
2026            "loc": {
2027              "start": {
2028                "line": 34,
2029                "column": 117
2030              },
2031              "end": {
2032                "line": 34,
2033                "column": 116
2034              }
2035            }
2036          },
2037          "loc": {
2038            "start": {
2039              "line": 34,
2040              "column": 117
2041            },
2042            "end": {
2043              "line": 34,
2044              "column": 116
2045            }
2046          }
2047        }
2048      ],
2049      "typeParameters": {
2050        "type": "TSTypeParameterDeclaration",
2051        "params": [
2052          {
2053            "type": "TSTypeParameter",
2054            "name": {
2055              "type": "Identifier",
2056              "name": "A",
2057              "loc": {
2058                "start": {
2059                  "line": 34,
2060                  "column": 13
2061                },
2062                "end": {
2063                  "line": 34,
2064                  "column": 14
2065                }
2066              }
2067            },
2068            "constraint": {
2069              "type": "TSTypeOperator",
2070              "operator": "readonly",
2071              "typeAnnotation": {
2072                "type": "TSTupleType",
2073                "elementTypes": [
2074                  {
2075                    "type": "TSNumberKeyword",
2076                    "loc": {
2077                      "start": {
2078                        "line": 34,
2079                        "column": 33
2080                      },
2081                      "end": {
2082                        "line": 34,
2083                        "column": 39
2084                      }
2085                    }
2086                  },
2087                  {
2088                    "type": "TSNumberKeyword",
2089                    "loc": {
2090                      "start": {
2091                        "line": 34,
2092                        "column": 41
2093                      },
2094                      "end": {
2095                        "line": 34,
2096                        "column": 47
2097                      }
2098                    }
2099                  },
2100                  {
2101                    "type": "TSTypeLiteral",
2102                    "members": [
2103                      {
2104                        "type": "TSPropertySignature",
2105                        "computed": false,
2106                        "optional": false,
2107                        "readonly": false,
2108                        "key": {
2109                          "type": "Identifier",
2110                          "name": "a",
2111                          "loc": {
2112                            "start": {
2113                              "line": 34,
2114                              "column": 51
2115                            },
2116                            "end": {
2117                              "line": 34,
2118                              "column": 52
2119                            }
2120                          }
2121                        },
2122                        "typeAnnotation": {
2123                          "type": "TSNumberKeyword",
2124                          "loc": {
2125                            "start": {
2126                              "line": 34,
2127                              "column": 54
2128                            },
2129                            "end": {
2130                              "line": 34,
2131                              "column": 60
2132                            }
2133                          }
2134                        },
2135                        "loc": {
2136                          "start": {
2137                            "line": 34,
2138                            "column": 51
2139                          },
2140                          "end": {
2141                            "line": 34,
2142                            "column": 61
2143                          }
2144                        }
2145                      },
2146                      {
2147                        "type": "TSPropertySignature",
2148                        "computed": false,
2149                        "optional": false,
2150                        "readonly": false,
2151                        "key": {
2152                          "type": "Identifier",
2153                          "name": "b",
2154                          "loc": {
2155                            "start": {
2156                              "line": 34,
2157                              "column": 62
2158                            },
2159                            "end": {
2160                              "line": 34,
2161                              "column": 63
2162                            }
2163                          }
2164                        },
2165                        "typeAnnotation": {
2166                          "type": "TSStringKeyword",
2167                          "loc": {
2168                            "start": {
2169                              "line": 34,
2170                              "column": 65
2171                            },
2172                            "end": {
2173                              "line": 34,
2174                              "column": 71
2175                            }
2176                          }
2177                        },
2178                        "loc": {
2179                          "start": {
2180                            "line": 34,
2181                            "column": 62
2182                          },
2183                          "end": {
2184                            "line": 34,
2185                            "column": 73
2186                          }
2187                        }
2188                      }
2189                    ],
2190                    "loc": {
2191                      "start": {
2192                        "line": 34,
2193                        "column": 49
2194                      },
2195                      "end": {
2196                        "line": 34,
2197                        "column": 73
2198                      }
2199                    }
2200                  }
2201                ],
2202                "loc": {
2203                  "start": {
2204                    "line": 34,
2205                    "column": 32
2206                  },
2207                  "end": {
2208                    "line": 34,
2209                    "column": 74
2210                  }
2211                }
2212              },
2213              "loc": {
2214                "start": {
2215                  "line": 34,
2216                  "column": 23
2217                },
2218                "end": {
2219                  "line": 34,
2220                  "column": 74
2221                }
2222              }
2223            },
2224            "in": false,
2225            "out": false,
2226            "loc": {
2227              "start": {
2228                "line": 34,
2229                "column": 13
2230              },
2231              "end": {
2232                "line": 34,
2233                "column": 75
2234              }
2235            }
2236          },
2237          {
2238            "type": "TSTypeParameter",
2239            "name": {
2240              "type": "Identifier",
2241              "name": "Z",
2242              "loc": {
2243                "start": {
2244                  "line": 34,
2245                  "column": 76
2246                },
2247                "end": {
2248                  "line": 34,
2249                  "column": 77
2250                }
2251              }
2252            },
2253            "default": {
2254              "type": "TSBooleanKeyword",
2255              "loc": {
2256                "start": {
2257                  "line": 34,
2258                  "column": 80
2259                },
2260                "end": {
2261                  "line": 34,
2262                  "column": 87
2263                }
2264              }
2265            },
2266            "in": false,
2267            "out": false,
2268            "loc": {
2269              "start": {
2270                "line": 34,
2271                "column": 76
2272              },
2273              "end": {
2274                "line": 34,
2275                "column": 88
2276              }
2277            }
2278          }
2279        ],
2280        "loc": {
2281          "start": {
2282            "line": 34,
2283            "column": 12
2284          },
2285          "end": {
2286            "line": 34,
2287            "column": 88
2288          }
2289        }
2290      },
2291      "loc": {
2292        "start": {
2293          "line": 34,
2294          "column": 1
2295        },
2296        "end": {
2297          "line": 37,
2298          "column": 2
2299        }
2300      }
2301    },
2302    {
2303      "type": "ExpressionStatement",
2304      "expression": {
2305        "type": "CallExpression",
2306        "callee": {
2307          "type": "Identifier",
2308          "name": "func1",
2309          "loc": {
2310            "start": {
2311              "line": 39,
2312              "column": 1
2313            },
2314            "end": {
2315              "line": 39,
2316              "column": 6
2317            }
2318          }
2319        },
2320        "arguments": [],
2321        "optional": false,
2322        "typeParameters": {
2323          "type": "TSTypeParameterInstantiation",
2324          "params": [
2325            {
2326              "type": "TSNumberKeyword",
2327              "loc": {
2328                "start": {
2329                  "line": 39,
2330                  "column": 7
2331                },
2332                "end": {
2333                  "line": 39,
2334                  "column": 13
2335                }
2336              }
2337            },
2338            {
2339              "type": "TSStringKeyword",
2340              "loc": {
2341                "start": {
2342                  "line": 39,
2343                  "column": 15
2344                },
2345                "end": {
2346                  "line": 39,
2347                  "column": 21
2348                }
2349              }
2350            },
2351            {
2352              "type": "TSTupleType",
2353              "elementTypes": [
2354                {
2355                  "type": "TSLiteralType",
2356                  "literal": {
2357                    "type": "NumberLiteral",
2358                    "value": 1,
2359                    "loc": {
2360                      "start": {
2361                        "line": 39,
2362                        "column": 24
2363                      },
2364                      "end": {
2365                        "line": 39,
2366                        "column": 25
2367                      }
2368                    }
2369                  },
2370                  "loc": {
2371                    "start": {
2372                      "line": 39,
2373                      "column": 24
2374                    },
2375                    "end": {
2376                      "line": 39,
2377                      "column": 25
2378                    }
2379                  }
2380                },
2381                {
2382                  "type": "TSLiteralType",
2383                  "literal": {
2384                    "type": "NumberLiteral",
2385                    "value": 2,
2386                    "loc": {
2387                      "start": {
2388                        "line": 39,
2389                        "column": 27
2390                      },
2391                      "end": {
2392                        "line": 39,
2393                        "column": 28
2394                      }
2395                    }
2396                  },
2397                  "loc": {
2398                    "start": {
2399                      "line": 39,
2400                      "column": 27
2401                    },
2402                    "end": {
2403                      "line": 39,
2404                      "column": 28
2405                    }
2406                  }
2407                },
2408                {
2409                  "type": "TSLiteralType",
2410                  "literal": {
2411                    "type": "NumberLiteral",
2412                    "value": 3,
2413                    "loc": {
2414                      "start": {
2415                        "line": 39,
2416                        "column": 30
2417                      },
2418                      "end": {
2419                        "line": 39,
2420                        "column": 31
2421                      }
2422                    }
2423                  },
2424                  "loc": {
2425                    "start": {
2426                      "line": 39,
2427                      "column": 30
2428                    },
2429                    "end": {
2430                      "line": 39,
2431                      "column": 31
2432                    }
2433                  }
2434                }
2435              ],
2436              "loc": {
2437                "start": {
2438                  "line": 39,
2439                  "column": 23
2440                },
2441                "end": {
2442                  "line": 39,
2443                  "column": 32
2444                }
2445              }
2446            }
2447          ],
2448          "loc": {
2449            "start": {
2450              "line": 39,
2451              "column": 6
2452            },
2453            "end": {
2454              "line": 39,
2455              "column": 33
2456            }
2457          }
2458        },
2459        "loc": {
2460          "start": {
2461            "line": 39,
2462            "column": 1
2463          },
2464          "end": {
2465            "line": 39,
2466            "column": 35
2467          }
2468        }
2469      },
2470      "loc": {
2471        "start": {
2472          "line": 39,
2473          "column": 1
2474        },
2475        "end": {
2476          "line": 39,
2477          "column": 35
2478        }
2479      }
2480    },
2481    {
2482      "type": "ExpressionStatement",
2483      "expression": {
2484        "type": "CallExpression",
2485        "callee": {
2486          "type": "Identifier",
2487          "name": "func2",
2488          "loc": {
2489            "start": {
2490              "line": 40,
2491              "column": 1
2492            },
2493            "end": {
2494              "line": 40,
2495              "column": 6
2496            }
2497          }
2498        },
2499        "arguments": [],
2500        "optional": false,
2501        "typeParameters": {
2502          "type": "TSTypeParameterInstantiation",
2503          "params": [
2504            {
2505              "type": "TSFunctionType",
2506              "params": [],
2507              "typeParameters": {
2508                "type": "TSTypeParameterDeclaration",
2509                "params": [
2510                  {
2511                    "type": "TSTypeParameter",
2512                    "name": {
2513                      "type": "Identifier",
2514                      "name": "A",
2515                      "loc": {
2516                        "start": {
2517                          "line": 40,
2518                          "column": 8
2519                        },
2520                        "end": {
2521                          "line": 40,
2522                          "column": 9
2523                        }
2524                      }
2525                    },
2526                    "in": false,
2527                    "out": false,
2528                    "loc": {
2529                      "start": {
2530                        "line": 40,
2531                        "column": 8
2532                      },
2533                      "end": {
2534                        "line": 40,
2535                        "column": 10
2536                      }
2537                    }
2538                  }
2539                ],
2540                "loc": {
2541                  "start": {
2542                    "line": 40,
2543                    "column": 7
2544                  },
2545                  "end": {
2546                    "line": 40,
2547                    "column": 10
2548                  }
2549                }
2550              },
2551              "returnType": {
2552                "type": "TSTypeLiteral",
2553                "members": [],
2554                "loc": {
2555                  "start": {
2556                    "line": 40,
2557                    "column": 16
2558                  },
2559                  "end": {
2560                    "line": 40,
2561                    "column": 18
2562                  }
2563                }
2564              },
2565              "loc": {
2566                "start": {
2567                  "line": 40,
2568                  "column": 7
2569                },
2570                "end": {
2571                  "line": 40,
2572                  "column": 18
2573                }
2574              }
2575            }
2576          ],
2577          "loc": {
2578            "start": {
2579              "line": 40,
2580              "column": 6
2581            },
2582            "end": {
2583              "line": 40,
2584              "column": 19
2585            }
2586          }
2587        },
2588        "loc": {
2589          "start": {
2590            "line": 40,
2591            "column": 1
2592          },
2593          "end": {
2594            "line": 40,
2595            "column": 21
2596          }
2597        }
2598      },
2599      "loc": {
2600        "start": {
2601          "line": 40,
2602          "column": 1
2603        },
2604        "end": {
2605          "line": 40,
2606          "column": 22
2607        }
2608      }
2609    },
2610    {
2611      "type": "VariableDeclaration",
2612      "declarations": [
2613        {
2614          "type": "VariableDeclarator",
2615          "id": {
2616            "type": "Identifier",
2617            "name": "o",
2618            "loc": {
2619              "start": {
2620                "line": 42,
2621                "column": 5
2622              },
2623              "end": {
2624                "line": 42,
2625                "column": 6
2626              }
2627            }
2628          },
2629          "init": {
2630            "type": "ObjectExpression",
2631            "properties": [
2632              {
2633                "type": "Property",
2634                "method": false,
2635                "shorthand": false,
2636                "computed": false,
2637                "key": {
2638                  "type": "Identifier",
2639                  "name": "a",
2640                  "loc": {
2641                    "start": {
2642                      "line": 43,
2643                      "column": 5
2644                    },
2645                    "end": {
2646                      "line": 43,
2647                      "column": 6
2648                    }
2649                  }
2650                },
2651                "value": {
2652                  "type": "FunctionExpression",
2653                  "function": {
2654                    "type": "ScriptFunction",
2655                    "id": null,
2656                    "generator": false,
2657                    "async": false,
2658                    "expression": false,
2659                    "params": [],
2660                    "typeParameters": {
2661                      "type": "TSTypeParameterDeclaration",
2662                      "params": [
2663                        {
2664                          "type": "TSTypeParameter",
2665                          "name": {
2666                            "type": "Identifier",
2667                            "name": "B",
2668                            "loc": {
2669                              "start": {
2670                                "line": 43,
2671                                "column": 18
2672                              },
2673                              "end": {
2674                                "line": 43,
2675                                "column": 19
2676                              }
2677                            }
2678                          },
2679                          "in": false,
2680                          "out": false,
2681                          "loc": {
2682                            "start": {
2683                              "line": 43,
2684                              "column": 18
2685                            },
2686                            "end": {
2687                              "line": 43,
2688                              "column": 20
2689                            }
2690                          }
2691                        },
2692                        {
2693                          "type": "TSTypeParameter",
2694                          "name": {
2695                            "type": "Identifier",
2696                            "name": "C",
2697                            "loc": {
2698                              "start": {
2699                                "line": 43,
2700                                "column": 21
2701                              },
2702                              "end": {
2703                                "line": 43,
2704                                "column": 22
2705                              }
2706                            }
2707                          },
2708                          "constraint": {
2709                            "type": "TSTypeQuery",
2710                            "exprName": {
2711                              "type": "Identifier",
2712                              "name": "func1",
2713                              "loc": {
2714                                "start": {
2715                                  "line": 43,
2716                                  "column": 38
2717                                },
2718                                "end": {
2719                                  "line": 43,
2720                                  "column": 43
2721                                }
2722                              }
2723                            },
2724                            "loc": {
2725                              "start": {
2726                                "line": 43,
2727                                "column": 31
2728                              },
2729                              "end": {
2730                                "line": 43,
2731                                "column": 43
2732                              }
2733                            }
2734                          },
2735                          "in": false,
2736                          "out": false,
2737                          "loc": {
2738                            "start": {
2739                              "line": 43,
2740                              "column": 21
2741                            },
2742                            "end": {
2743                              "line": 43,
2744                              "column": 44
2745                            }
2746                          }
2747                        }
2748                      ],
2749                      "loc": {
2750                        "start": {
2751                          "line": 43,
2752                          "column": 17
2753                        },
2754                        "end": {
2755                          "line": 43,
2756                          "column": 44
2757                        }
2758                      }
2759                    },
2760                    "body": {
2761                      "type": "BlockStatement",
2762                      "statements": [],
2763                      "loc": {
2764                        "start": {
2765                          "line": 43,
2766                          "column": 47
2767                        },
2768                        "end": {
2769                          "line": 43,
2770                          "column": 50
2771                        }
2772                      }
2773                    },
2774                    "loc": {
2775                      "start": {
2776                        "line": 43,
2777                        "column": 8
2778                      },
2779                      "end": {
2780                        "line": 43,
2781                        "column": 50
2782                      }
2783                    }
2784                  },
2785                  "loc": {
2786                    "start": {
2787                      "line": 43,
2788                      "column": 8
2789                    },
2790                    "end": {
2791                      "line": 43,
2792                      "column": 50
2793                    }
2794                  }
2795                },
2796                "kind": "init",
2797                "loc": {
2798                  "start": {
2799                    "line": 43,
2800                    "column": 5
2801                  },
2802                  "end": {
2803                    "line": 43,
2804                    "column": 50
2805                  }
2806                }
2807              },
2808              {
2809                "type": "Property",
2810                "method": false,
2811                "shorthand": false,
2812                "computed": false,
2813                "key": {
2814                  "type": "Identifier",
2815                  "name": "b",
2816                  "loc": {
2817                    "start": {
2818                      "line": 44,
2819                      "column": 5
2820                    },
2821                    "end": {
2822                      "line": 44,
2823                      "column": 6
2824                    }
2825                  }
2826                },
2827                "value": {
2828                  "type": "FunctionExpression",
2829                  "function": {
2830                    "type": "ScriptFunction",
2831                    "id": null,
2832                    "generator": false,
2833                    "async": false,
2834                    "expression": false,
2835                    "params": [],
2836                    "typeParameters": {
2837                      "type": "TSTypeParameterDeclaration",
2838                      "params": [
2839                        {
2840                          "type": "TSTypeParameter",
2841                          "name": {
2842                            "type": "Identifier",
2843                            "name": "D",
2844                            "loc": {
2845                              "start": {
2846                                "line": 44,
2847                                "column": 18
2848                              },
2849                              "end": {
2850                                "line": 44,
2851                                "column": 19
2852                              }
2853                            }
2854                          },
2855                          "default": {
2856                            "type": "TSNumberKeyword",
2857                            "loc": {
2858                              "start": {
2859                                "line": 44,
2860                                "column": 22
2861                              },
2862                              "end": {
2863                                "line": 44,
2864                                "column": 28
2865                              }
2866                            }
2867                          },
2868                          "in": false,
2869                          "out": false,
2870                          "loc": {
2871                            "start": {
2872                              "line": 44,
2873                              "column": 18
2874                            },
2875                            "end": {
2876                              "line": 44,
2877                              "column": 29
2878                            }
2879                          }
2880                        },
2881                        {
2882                          "type": "TSTypeParameter",
2883                          "name": {
2884                            "type": "Identifier",
2885                            "name": "T",
2886                            "loc": {
2887                              "start": {
2888                                "line": 44,
2889                                "column": 30
2890                              },
2891                              "end": {
2892                                "line": 44,
2893                                "column": 31
2894                              }
2895                            }
2896                          },
2897                          "default": {
2898                            "type": "TSStringKeyword",
2899                            "loc": {
2900                              "start": {
2901                                "line": 44,
2902                                "column": 34
2903                              },
2904                              "end": {
2905                                "line": 44,
2906                                "column": 40
2907                              }
2908                            }
2909                          },
2910                          "in": false,
2911                          "out": false,
2912                          "loc": {
2913                            "start": {
2914                              "line": 44,
2915                              "column": 30
2916                            },
2917                            "end": {
2918                              "line": 44,
2919                              "column": 41
2920                            }
2921                          }
2922                        }
2923                      ],
2924                      "loc": {
2925                        "start": {
2926                          "line": 44,
2927                          "column": 17
2928                        },
2929                        "end": {
2930                          "line": 44,
2931                          "column": 41
2932                        }
2933                      }
2934                    },
2935                    "body": {
2936                      "type": "BlockStatement",
2937                      "statements": [],
2938                      "loc": {
2939                        "start": {
2940                          "line": 44,
2941                          "column": 44
2942                        },
2943                        "end": {
2944                          "line": 44,
2945                          "column": 47
2946                        }
2947                      }
2948                    },
2949                    "loc": {
2950                      "start": {
2951                        "line": 44,
2952                        "column": 8
2953                      },
2954                      "end": {
2955                        "line": 44,
2956                        "column": 47
2957                      }
2958                    }
2959                  },
2960                  "loc": {
2961                    "start": {
2962                      "line": 44,
2963                      "column": 8
2964                    },
2965                    "end": {
2966                      "line": 44,
2967                      "column": 47
2968                    }
2969                  }
2970                },
2971                "kind": "init",
2972                "loc": {
2973                  "start": {
2974                    "line": 44,
2975                    "column": 5
2976                  },
2977                  "end": {
2978                    "line": 44,
2979                    "column": 47
2980                  }
2981                }
2982              },
2983              {
2984                "type": "Property",
2985                "method": true,
2986                "shorthand": false,
2987                "computed": false,
2988                "key": {
2989                  "type": "Identifier",
2990                  "name": "c",
2991                  "loc": {
2992                    "start": {
2993                      "line": 45,
2994                      "column": 5
2995                    },
2996                    "end": {
2997                      "line": 45,
2998                      "column": 6
2999                    }
3000                  }
3001                },
3002                "value": {
3003                  "type": "FunctionExpression",
3004                  "function": {
3005                    "type": "ScriptFunction",
3006                    "id": null,
3007                    "generator": false,
3008                    "async": false,
3009                    "expression": false,
3010                    "params": [],
3011                    "typeParameters": {
3012                      "type": "TSTypeParameterDeclaration",
3013                      "params": [
3014                        {
3015                          "type": "TSTypeParameter",
3016                          "name": {
3017                            "type": "Identifier",
3018                            "name": "E",
3019                            "loc": {
3020                              "start": {
3021                                "line": 45,
3022                                "column": 7
3023                              },
3024                              "end": {
3025                                "line": 45,
3026                                "column": 8
3027                              }
3028                            }
3029                          },
3030                          "in": false,
3031                          "out": false,
3032                          "loc": {
3033                            "start": {
3034                              "line": 45,
3035                              "column": 7
3036                            },
3037                            "end": {
3038                              "line": 45,
3039                              "column": 9
3040                            }
3041                          }
3042                        },
3043                        {
3044                          "type": "TSTypeParameter",
3045                          "name": {
3046                            "type": "Identifier",
3047                            "name": "F",
3048                            "loc": {
3049                              "start": {
3050                                "line": 45,
3051                                "column": 10
3052                              },
3053                              "end": {
3054                                "line": 45,
3055                                "column": 11
3056                              }
3057                            }
3058                          },
3059                          "constraint": {
3060                            "type": "TSTypeOperator",
3061                            "operator": "readonly",
3062                            "typeAnnotation": {
3063                              "type": "TSTupleType",
3064                              "elementTypes": [],
3065                              "loc": {
3066                                "start": {
3067                                  "line": 45,
3068                                  "column": 29
3069                                },
3070                                "end": {
3071                                  "line": 45,
3072                                  "column": 31
3073                                }
3074                              }
3075                            },
3076                            "loc": {
3077                              "start": {
3078                                "line": 45,
3079                                "column": 20
3080                              },
3081                              "end": {
3082                                "line": 45,
3083                                "column": 31
3084                              }
3085                            }
3086                          },
3087                          "in": false,
3088                          "out": false,
3089                          "loc": {
3090                            "start": {
3091                              "line": 45,
3092                              "column": 10
3093                            },
3094                            "end": {
3095                              "line": 45,
3096                              "column": 32
3097                            }
3098                          }
3099                        }
3100                      ],
3101                      "loc": {
3102                        "start": {
3103                          "line": 45,
3104                          "column": 6
3105                        },
3106                        "end": {
3107                          "line": 45,
3108                          "column": 32
3109                        }
3110                      }
3111                    },
3112                    "body": {
3113                      "type": "BlockStatement",
3114                      "statements": [],
3115                      "loc": {
3116                        "start": {
3117                          "line": 45,
3118                          "column": 35
3119                        },
3120                        "end": {
3121                          "line": 45,
3122                          "column": 38
3123                        }
3124                      }
3125                    },
3126                    "loc": {
3127                      "start": {
3128                        "line": 45,
3129                        "column": 6
3130                      },
3131                      "end": {
3132                        "line": 45,
3133                        "column": 38
3134                      }
3135                    }
3136                  },
3137                  "loc": {
3138                    "start": {
3139                      "line": 45,
3140                      "column": 6
3141                    },
3142                    "end": {
3143                      "line": 45,
3144                      "column": 38
3145                    }
3146                  }
3147                },
3148                "kind": "init",
3149                "loc": {
3150                  "start": {
3151                    "line": 45,
3152                    "column": 5
3153                  },
3154                  "end": {
3155                    "line": 45,
3156                    "column": 38
3157                  }
3158                }
3159              }
3160            ],
3161            "loc": {
3162              "start": {
3163                "line": 42,
3164                "column": 9
3165              },
3166              "end": {
3167                "line": 46,
3168                "column": 2
3169              }
3170            }
3171          },
3172          "loc": {
3173            "start": {
3174              "line": 42,
3175              "column": 5
3176            },
3177            "end": {
3178              "line": 46,
3179              "column": 2
3180            }
3181          }
3182        }
3183      ],
3184      "kind": "var",
3185      "loc": {
3186        "start": {
3187          "line": 42,
3188          "column": 1
3189        },
3190        "end": {
3191          "line": 46,
3192          "column": 2
3193        }
3194      }
3195    },
3196    {
3197      "type": "ClassDeclaration",
3198      "definition": {
3199        "id": {
3200          "type": "Identifier",
3201          "name": "A",
3202          "loc": {
3203            "start": {
3204              "line": 48,
3205              "column": 7
3206            },
3207            "end": {
3208              "line": 48,
3209              "column": 8
3210            }
3211          }
3212        },
3213        "typeParameters": {
3214          "type": "TSTypeParameterDeclaration",
3215          "params": [
3216            {
3217              "type": "TSTypeParameter",
3218              "name": {
3219                "type": "Identifier",
3220                "name": "T",
3221                "loc": {
3222                  "start": {
3223                    "line": 48,
3224                    "column": 9
3225                  },
3226                  "end": {
3227                    "line": 48,
3228                    "column": 10
3229                  }
3230                }
3231              },
3232              "constraint": {
3233                "type": "TSTypeReference",
3234                "typeName": {
3235                  "type": "Identifier",
3236                  "name": "B",
3237                  "loc": {
3238                    "start": {
3239                      "line": 48,
3240                      "column": 19
3241                    },
3242                    "end": {
3243                      "line": 48,
3244                      "column": 20
3245                    }
3246                  }
3247                },
3248                "loc": {
3249                  "start": {
3250                    "line": 48,
3251                    "column": 19
3252                  },
3253                  "end": {
3254                    "line": 48,
3255                    "column": 20
3256                  }
3257                }
3258              },
3259              "in": false,
3260              "out": false,
3261              "loc": {
3262                "start": {
3263                  "line": 48,
3264                  "column": 9
3265                },
3266                "end": {
3267                  "line": 48,
3268                  "column": 21
3269                }
3270              }
3271            },
3272            {
3273              "type": "TSTypeParameter",
3274              "name": {
3275                "type": "Identifier",
3276                "name": "Z",
3277                "loc": {
3278                  "start": {
3279                    "line": 48,
3280                    "column": 22
3281                  },
3282                  "end": {
3283                    "line": 48,
3284                    "column": 23
3285                  }
3286                }
3287              },
3288              "default": {
3289                "type": "TSTypeLiteral",
3290                "members": [
3291                  {
3292                    "type": "TSPropertySignature",
3293                    "computed": false,
3294                    "optional": false,
3295                    "readonly": false,
3296                    "key": {
3297                      "type": "Identifier",
3298                      "name": "a",
3299                      "loc": {
3300                        "start": {
3301                          "line": 48,
3302                          "column": 28
3303                        },
3304                        "end": {
3305                          "line": 48,
3306                          "column": 29
3307                        }
3308                      }
3309                    },
3310                    "typeAnnotation": {
3311                      "type": "TSNumberKeyword",
3312                      "loc": {
3313                        "start": {
3314                          "line": 48,
3315                          "column": 31
3316                        },
3317                        "end": {
3318                          "line": 48,
3319                          "column": 37
3320                        }
3321                      }
3322                    },
3323                    "loc": {
3324                      "start": {
3325                        "line": 48,
3326                        "column": 28
3327                      },
3328                      "end": {
3329                        "line": 48,
3330                        "column": 38
3331                      }
3332                    }
3333                  },
3334                  {
3335                    "type": "TSPropertySignature",
3336                    "computed": false,
3337                    "optional": false,
3338                    "readonly": false,
3339                    "key": {
3340                      "type": "Identifier",
3341                      "name": "b",
3342                      "loc": {
3343                        "start": {
3344                          "line": 48,
3345                          "column": 39
3346                        },
3347                        "end": {
3348                          "line": 48,
3349                          "column": 40
3350                        }
3351                      }
3352                    },
3353                    "typeAnnotation": {
3354                      "type": "TSStringKeyword",
3355                      "loc": {
3356                        "start": {
3357                          "line": 48,
3358                          "column": 42
3359                        },
3360                        "end": {
3361                          "line": 48,
3362                          "column": 48
3363                        }
3364                      }
3365                    },
3366                    "loc": {
3367                      "start": {
3368                        "line": 48,
3369                        "column": 39
3370                      },
3371                      "end": {
3372                        "line": 48,
3373                        "column": 50
3374                      }
3375                    }
3376                  }
3377                ],
3378                "loc": {
3379                  "start": {
3380                    "line": 48,
3381                    "column": 26
3382                  },
3383                  "end": {
3384                    "line": 48,
3385                    "column": 50
3386                  }
3387                }
3388              },
3389              "in": false,
3390              "out": false,
3391              "loc": {
3392                "start": {
3393                  "line": 48,
3394                  "column": 22
3395                },
3396                "end": {
3397                  "line": 48,
3398                  "column": 51
3399                }
3400              }
3401            }
3402          ],
3403          "loc": {
3404            "start": {
3405              "line": 48,
3406              "column": 8
3407            },
3408            "end": {
3409              "line": 48,
3410              "column": 51
3411            }
3412          }
3413        },
3414        "superClass": null,
3415        "implements": [],
3416        "constructor": {
3417          "type": "MethodDefinition",
3418          "key": {
3419            "type": "Identifier",
3420            "name": "constructor",
3421            "loc": {
3422              "start": {
3423                "line": 1,
3424                "column": 1
3425              },
3426              "end": {
3427                "line": 1,
3428                "column": 1
3429              }
3430            }
3431          },
3432          "kind": "constructor",
3433          "static": false,
3434          "optional": false,
3435          "computed": false,
3436          "value": {
3437            "type": "FunctionExpression",
3438            "function": {
3439              "type": "ScriptFunction",
3440              "id": null,
3441              "generator": false,
3442              "async": false,
3443              "expression": false,
3444              "params": [],
3445              "body": {
3446                "type": "BlockStatement",
3447                "statements": [],
3448                "loc": {
3449                  "start": {
3450                    "line": 1,
3451                    "column": 1
3452                  },
3453                  "end": {
3454                    "line": 1,
3455                    "column": 1
3456                  }
3457                }
3458              },
3459              "loc": {
3460                "start": {
3461                  "line": 1,
3462                  "column": 1
3463                },
3464                "end": {
3465                  "line": 1,
3466                  "column": 1
3467                }
3468              }
3469            },
3470            "loc": {
3471              "start": {
3472                "line": 1,
3473                "column": 1
3474              },
3475              "end": {
3476                "line": 1,
3477                "column": 1
3478              }
3479            }
3480          },
3481          "overloads": [],
3482          "decorators": [],
3483          "annotations": [],
3484          "loc": {
3485            "start": {
3486              "line": 48,
3487              "column": 1
3488            },
3489            "end": {
3490              "line": 51,
3491              "column": 2
3492            }
3493          }
3494        },
3495        "body": [
3496          {
3497            "type": "MethodDefinition",
3498            "key": {
3499              "type": "Identifier",
3500              "name": "a",
3501              "loc": {
3502                "start": {
3503                  "line": 49,
3504                  "column": 12
3505                },
3506                "end": {
3507                  "line": 49,
3508                  "column": 13
3509                }
3510              }
3511            },
3512            "kind": "method",
3513            "accessibility": "public",
3514            "static": false,
3515            "optional": false,
3516            "computed": false,
3517            "value": {
3518              "type": "FunctionExpression",
3519              "function": {
3520                "type": "ScriptFunction",
3521                "id": null,
3522                "generator": false,
3523                "async": false,
3524                "expression": false,
3525                "params": [],
3526                "typeParameters": {
3527                  "type": "TSTypeParameterDeclaration",
3528                  "params": [
3529                    {
3530                      "type": "TSTypeParameter",
3531                      "name": {
3532                        "type": "Identifier",
3533                        "name": "T",
3534                        "loc": {
3535                          "start": {
3536                            "line": 49,
3537                            "column": 14
3538                          },
3539                          "end": {
3540                            "line": 49,
3541                            "column": 15
3542                          }
3543                        }
3544                      },
3545                      "in": false,
3546                      "out": false,
3547                      "loc": {
3548                        "start": {
3549                          "line": 49,
3550                          "column": 14
3551                        },
3552                        "end": {
3553                          "line": 49,
3554                          "column": 16
3555                        }
3556                      }
3557                    },
3558                    {
3559                      "type": "TSTypeParameter",
3560                      "name": {
3561                        "type": "Identifier",
3562                        "name": "R",
3563                        "loc": {
3564                          "start": {
3565                            "line": 49,
3566                            "column": 17
3567                          },
3568                          "end": {
3569                            "line": 49,
3570                            "column": 18
3571                          }
3572                        }
3573                      },
3574                      "in": false,
3575                      "out": false,
3576                      "loc": {
3577                        "start": {
3578                          "line": 49,
3579                          "column": 17
3580                        },
3581                        "end": {
3582                          "line": 49,
3583                          "column": 19
3584                        }
3585                      }
3586                    }
3587                  ],
3588                  "loc": {
3589                    "start": {
3590                      "line": 49,
3591                      "column": 13
3592                    },
3593                    "end": {
3594                      "line": 49,
3595                      "column": 19
3596                    }
3597                  }
3598                },
3599                "body": {
3600                  "type": "BlockStatement",
3601                  "statements": [],
3602                  "loc": {
3603                    "start": {
3604                      "line": 49,
3605                      "column": 22
3606                    },
3607                    "end": {
3608                      "line": 49,
3609                      "column": 25
3610                    }
3611                  }
3612                },
3613                "loc": {
3614                  "start": {
3615                    "line": 49,
3616                    "column": 13
3617                  },
3618                  "end": {
3619                    "line": 49,
3620                    "column": 25
3621                  }
3622                }
3623              },
3624              "loc": {
3625                "start": {
3626                  "line": 49,
3627                  "column": 13
3628                },
3629                "end": {
3630                  "line": 49,
3631                  "column": 25
3632                }
3633              }
3634            },
3635            "overloads": [],
3636            "decorators": [],
3637            "annotations": [],
3638            "loc": {
3639              "start": {
3640                "line": 49,
3641                "column": 5
3642              },
3643              "end": {
3644                "line": 49,
3645                "column": 25
3646              }
3647            }
3648          },
3649          {
3650            "type": "MethodDefinition",
3651            "key": {
3652              "type": "Identifier",
3653              "name": "b",
3654              "loc": {
3655                "start": {
3656                  "line": 50,
3657                  "column": 13
3658                },
3659                "end": {
3660                  "line": 50,
3661                  "column": 14
3662                }
3663              }
3664            },
3665            "kind": "method",
3666            "accessibility": "private",
3667            "static": false,
3668            "optional": false,
3669            "computed": false,
3670            "value": {
3671              "type": "FunctionExpression",
3672              "function": {
3673                "type": "ScriptFunction",
3674                "id": null,
3675                "generator": false,
3676                "async": false,
3677                "expression": false,
3678                "params": [],
3679                "typeParameters": {
3680                  "type": "TSTypeParameterDeclaration",
3681                  "params": [
3682                    {
3683                      "type": "TSTypeParameter",
3684                      "name": {
3685                        "type": "Identifier",
3686                        "name": "E",
3687                        "loc": {
3688                          "start": {
3689                            "line": 50,
3690                            "column": 15
3691                          },
3692                          "end": {
3693                            "line": 50,
3694                            "column": 16
3695                          }
3696                        }
3697                      },
3698                      "constraint": {
3699                        "type": "TSFunctionType",
3700                        "params": [
3701                          {
3702                            "type": "Identifier",
3703                            "name": "a",
3704                            "typeAnnotation": {
3705                              "type": "TSNumberKeyword",
3706                              "loc": {
3707                                "start": {
3708                                  "line": 50,
3709                                  "column": 29
3710                                },
3711                                "end": {
3712                                  "line": 50,
3713                                  "column": 35
3714                                }
3715                              }
3716                            },
3717                            "loc": {
3718                              "start": {
3719                                "line": 50,
3720                                "column": 26
3721                              },
3722                              "end": {
3723                                "line": 50,
3724                                "column": 27
3725                              }
3726                            }
3727                          },
3728                          {
3729                            "type": "Identifier",
3730                            "name": "b",
3731                            "typeAnnotation": {
3732                              "type": "TSStringKeyword",
3733                              "loc": {
3734                                "start": {
3735                                  "line": 50,
3736                                  "column": 40
3737                                },
3738                                "end": {
3739                                  "line": 50,
3740                                  "column": 46
3741                                }
3742                              }
3743                            },
3744                            "loc": {
3745                              "start": {
3746                                "line": 50,
3747                                "column": 37
3748                              },
3749                              "end": {
3750                                "line": 50,
3751                                "column": 38
3752                              }
3753                            }
3754                          }
3755                        ],
3756                        "returnType": {
3757                          "type": "TSArrayType",
3758                          "elementType": {
3759                            "type": "TSAnyKeyword",
3760                            "loc": {
3761                              "start": {
3762                                "line": 50,
3763                                "column": 51
3764                              },
3765                              "end": {
3766                                "line": 50,
3767                                "column": 54
3768                              }
3769                            }
3770                          },
3771                          "loc": {
3772                            "start": {
3773                              "line": 50,
3774                              "column": 51
3775                            },
3776                            "end": {
3777                              "line": 50,
3778                              "column": 56
3779                            }
3780                          }
3781                        },
3782                        "loc": {
3783                          "start": {
3784                            "line": 50,
3785                            "column": 25
3786                          },
3787                          "end": {
3788                            "line": 50,
3789                            "column": 56
3790                          }
3791                        }
3792                      },
3793                      "in": false,
3794                      "out": false,
3795                      "loc": {
3796                        "start": {
3797                          "line": 50,
3798                          "column": 15
3799                        },
3800                        "end": {
3801                          "line": 50,
3802                          "column": 57
3803                        }
3804                      }
3805                    }
3806                  ],
3807                  "loc": {
3808                    "start": {
3809                      "line": 50,
3810                      "column": 14
3811                    },
3812                    "end": {
3813                      "line": 50,
3814                      "column": 57
3815                    }
3816                  }
3817                },
3818                "body": {
3819                  "type": "BlockStatement",
3820                  "statements": [],
3821                  "loc": {
3822                    "start": {
3823                      "line": 50,
3824                      "column": 60
3825                    },
3826                    "end": {
3827                      "line": 50,
3828                      "column": 63
3829                    }
3830                  }
3831                },
3832                "loc": {
3833                  "start": {
3834                    "line": 50,
3835                    "column": 14
3836                  },
3837                  "end": {
3838                    "line": 50,
3839                    "column": 63
3840                  }
3841                }
3842              },
3843              "loc": {
3844                "start": {
3845                  "line": 50,
3846                  "column": 14
3847                },
3848                "end": {
3849                  "line": 50,
3850                  "column": 63
3851                }
3852              }
3853            },
3854            "overloads": [],
3855            "decorators": [],
3856            "annotations": [],
3857            "loc": {
3858              "start": {
3859                "line": 50,
3860                "column": 5
3861              },
3862              "end": {
3863                "line": 50,
3864                "column": 63
3865              }
3866            }
3867          }
3868        ],
3869        "indexSignatures": [],
3870        "loc": {
3871          "start": {
3872            "line": 48,
3873            "column": 52
3874          },
3875          "end": {
3876            "line": 51,
3877            "column": 2
3878          }
3879        }
3880      },
3881      "decorators": [],
3882      "isAnnotationDeclaration": false,
3883      "loc": {
3884        "start": {
3885          "line": 48,
3886          "column": 1
3887        },
3888        "end": {
3889          "line": 51,
3890          "column": 2
3891        }
3892      }
3893    },
3894    {
3895      "type": "ClassDeclaration",
3896      "definition": {
3897        "id": {
3898          "type": "Identifier",
3899          "name": "W",
3900          "loc": {
3901            "start": {
3902              "line": 53,
3903              "column": 7
3904            },
3905            "end": {
3906              "line": 53,
3907              "column": 8
3908            }
3909          }
3910        },
3911        "superClass": {
3912          "type": "Identifier",
3913          "name": "T",
3914          "loc": {
3915            "start": {
3916              "line": 53,
3917              "column": 17
3918            },
3919            "end": {
3920              "line": 53,
3921              "column": 18
3922            }
3923          }
3924        },
3925        "superTypeParameters": {
3926          "type": "TSTypeParameterInstantiation",
3927          "params": [
3928            {
3929              "type": "TSFunctionType",
3930              "params": [],
3931              "typeParameters": {
3932                "type": "TSTypeParameterDeclaration",
3933                "params": [
3934                  {
3935                    "type": "TSTypeParameter",
3936                    "name": {
3937                      "type": "Identifier",
3938                      "name": "B",
3939                      "loc": {
3940                        "start": {
3941                          "line": 53,
3942                          "column": 20
3943                        },
3944                        "end": {
3945                          "line": 53,
3946                          "column": 21
3947                        }
3948                      }
3949                    },
3950                    "in": false,
3951                    "out": false,
3952                    "loc": {
3953                      "start": {
3954                        "line": 53,
3955                        "column": 20
3956                      },
3957                      "end": {
3958                        "line": 53,
3959                        "column": 22
3960                      }
3961                    }
3962                  }
3963                ],
3964                "loc": {
3965                  "start": {
3966                    "line": 53,
3967                    "column": 19
3968                  },
3969                  "end": {
3970                    "line": 53,
3971                    "column": 22
3972                  }
3973                }
3974              },
3975              "returnType": {
3976                "type": "TSNumberKeyword",
3977                "loc": {
3978                  "start": {
3979                    "line": 53,
3980                    "column": 29
3981                  },
3982                  "end": {
3983                    "line": 53,
3984                    "column": 35
3985                  }
3986                }
3987              },
3988              "loc": {
3989                "start": {
3990                  "line": 53,
3991                  "column": 19
3992                },
3993                "end": {
3994                  "line": 53,
3995                  "column": 35
3996                }
3997              }
3998            },
3999            {
4000              "type": "TSArrayType",
4001              "elementType": {
4002                "type": "TSTupleType",
4003                "elementTypes": [
4004                  {
4005                    "type": "TSUnionType",
4006                    "types": [
4007                      {
4008                        "type": "TSNumberKeyword",
4009                        "loc": {
4010                          "start": {
4011                            "line": 53,
4012                            "column": 38
4013                          },
4014                          "end": {
4015                            "line": 53,
4016                            "column": 44
4017                          }
4018                        }
4019                      },
4020                      {
4021                        "type": "TSStringKeyword",
4022                        "loc": {
4023                          "start": {
4024                            "line": 53,
4025                            "column": 47
4026                          },
4027                          "end": {
4028                            "line": 53,
4029                            "column": 53
4030                          }
4031                        }
4032                      }
4033                    ],
4034                    "loc": {
4035                      "start": {
4036                        "line": 53,
4037                        "column": 38
4038                      },
4039                      "end": {
4040                        "line": 53,
4041                        "column": 53
4042                      }
4043                    }
4044                  }
4045                ],
4046                "loc": {
4047                  "start": {
4048                    "line": 53,
4049                    "column": 37
4050                  },
4051                  "end": {
4052                    "line": 53,
4053                    "column": 54
4054                  }
4055                }
4056              },
4057              "loc": {
4058                "start": {
4059                  "line": 53,
4060                  "column": 37
4061                },
4062                "end": {
4063                  "line": 53,
4064                  "column": 56
4065                }
4066              }
4067            }
4068          ],
4069          "loc": {
4070            "start": {
4071              "line": 53,
4072              "column": 18
4073            },
4074            "end": {
4075              "line": 53,
4076              "column": 57
4077            }
4078          }
4079        },
4080        "implements": [],
4081        "constructor": {
4082          "type": "MethodDefinition",
4083          "key": {
4084            "type": "Identifier",
4085            "name": "constructor",
4086            "loc": {
4087              "start": {
4088                "line": 1,
4089                "column": 1
4090              },
4091              "end": {
4092                "line": 1,
4093                "column": 1
4094              }
4095            }
4096          },
4097          "kind": "constructor",
4098          "static": false,
4099          "optional": false,
4100          "computed": false,
4101          "value": {
4102            "type": "FunctionExpression",
4103            "function": {
4104              "type": "ScriptFunction",
4105              "id": null,
4106              "generator": false,
4107              "async": false,
4108              "expression": false,
4109              "params": [
4110                {
4111                  "type": "RestElement",
4112                  "argument": {
4113                    "type": "Identifier",
4114                    "name": "args",
4115                    "loc": {
4116                      "start": {
4117                        "line": 1,
4118                        "column": 1
4119                      },
4120                      "end": {
4121                        "line": 1,
4122                        "column": 1
4123                      }
4124                    }
4125                  },
4126                  "loc": {
4127                    "start": {
4128                      "line": 1,
4129                      "column": 1
4130                    },
4131                    "end": {
4132                      "line": 1,
4133                      "column": 1
4134                    }
4135                  }
4136                }
4137              ],
4138              "body": {
4139                "type": "BlockStatement",
4140                "statements": [
4141                  {
4142                    "type": "ExpressionStatement",
4143                    "expression": {
4144                      "type": "CallExpression",
4145                      "callee": {
4146                        "type": "Super",
4147                        "loc": {
4148                          "start": {
4149                            "line": 1,
4150                            "column": 1
4151                          },
4152                          "end": {
4153                            "line": 1,
4154                            "column": 1
4155                          }
4156                        }
4157                      },
4158                      "arguments": [
4159                        {
4160                          "type": "SpreadElement",
4161                          "argument": {
4162                            "type": "Identifier",
4163                            "name": "args",
4164                            "loc": {
4165                              "start": {
4166                                "line": 1,
4167                                "column": 1
4168                              },
4169                              "end": {
4170                                "line": 1,
4171                                "column": 1
4172                              }
4173                            }
4174                          },
4175                          "loc": {
4176                            "start": {
4177                              "line": 1,
4178                              "column": 1
4179                            },
4180                            "end": {
4181                              "line": 1,
4182                              "column": 1
4183                            }
4184                          }
4185                        }
4186                      ],
4187                      "optional": false,
4188                      "loc": {
4189                        "start": {
4190                          "line": 1,
4191                          "column": 1
4192                        },
4193                        "end": {
4194                          "line": 1,
4195                          "column": 1
4196                        }
4197                      }
4198                    },
4199                    "loc": {
4200                      "start": {
4201                        "line": 1,
4202                        "column": 1
4203                      },
4204                      "end": {
4205                        "line": 1,
4206                        "column": 1
4207                      }
4208                    }
4209                  }
4210                ],
4211                "loc": {
4212                  "start": {
4213                    "line": 1,
4214                    "column": 1
4215                  },
4216                  "end": {
4217                    "line": 1,
4218                    "column": 1
4219                  }
4220                }
4221              },
4222              "loc": {
4223                "start": {
4224                  "line": 1,
4225                  "column": 1
4226                },
4227                "end": {
4228                  "line": 1,
4229                  "column": 1
4230                }
4231              }
4232            },
4233            "loc": {
4234              "start": {
4235                "line": 1,
4236                "column": 1
4237              },
4238              "end": {
4239                "line": 1,
4240                "column": 1
4241              }
4242            }
4243          },
4244          "overloads": [],
4245          "decorators": [],
4246          "annotations": [],
4247          "loc": {
4248            "start": {
4249              "line": 53,
4250              "column": 1
4251            },
4252            "end": {
4253              "line": 55,
4254              "column": 2
4255            }
4256          }
4257        },
4258        "body": [],
4259        "indexSignatures": [],
4260        "loc": {
4261          "start": {
4262            "line": 53,
4263            "column": 58
4264          },
4265          "end": {
4266            "line": 55,
4267            "column": 2
4268          }
4269        }
4270      },
4271      "decorators": [],
4272      "isAnnotationDeclaration": false,
4273      "loc": {
4274        "start": {
4275          "line": 53,
4276          "column": 1
4277        },
4278        "end": {
4279          "line": 55,
4280          "column": 2
4281        }
4282      }
4283    },
4284    {
4285      "type": "ClassDeclaration",
4286      "definition": {
4287        "id": {
4288          "type": "Identifier",
4289          "name": "X",
4290          "loc": {
4291            "start": {
4292              "line": 57,
4293              "column": 7
4294            },
4295            "end": {
4296              "line": 57,
4297              "column": 8
4298            }
4299          }
4300        },
4301        "superClass": {
4302          "type": "Identifier",
4303          "name": "Q",
4304          "loc": {
4305            "start": {
4306              "line": 57,
4307              "column": 17
4308            },
4309            "end": {
4310              "line": 57,
4311              "column": 18
4312            }
4313          }
4314        },
4315        "superTypeParameters": {
4316          "type": "TSTypeParameterInstantiation",
4317          "params": [
4318            {
4319              "type": "TSNumberKeyword",
4320              "loc": {
4321                "start": {
4322                  "line": 57,
4323                  "column": 19
4324                },
4325                "end": {
4326                  "line": 57,
4327                  "column": 25
4328                }
4329              }
4330            }
4331          ],
4332          "loc": {
4333            "start": {
4334              "line": 57,
4335              "column": 18
4336            },
4337            "end": {
4338              "line": 57,
4339              "column": 26
4340            }
4341          }
4342        },
4343        "implements": [
4344          {
4345            "type": "TSClassImplements",
4346            "expression": {
4347              "type": "Identifier",
4348              "name": "S",
4349              "loc": {
4350                "start": {
4351                  "line": 57,
4352                  "column": 38
4353                },
4354                "end": {
4355                  "line": 57,
4356                  "column": 39
4357                }
4358              }
4359            },
4360            "typeParameters": {
4361              "type": "TSTypeParameterInstantiation",
4362              "params": [
4363                {
4364                  "type": "TSFunctionType",
4365                  "params": [
4366                    {
4367                      "type": "Identifier",
4368                      "name": "a",
4369                      "typeAnnotation": {
4370                        "type": "TSNumberKeyword",
4371                        "loc": {
4372                          "start": {
4373                            "line": 57,
4374                            "column": 46
4375                          },
4376                          "end": {
4377                            "line": 57,
4378                            "column": 52
4379                          }
4380                        }
4381                      },
4382                      "loc": {
4383                        "start": {
4384                          "line": 57,
4385                          "column": 44
4386                        },
4387                        "end": {
4388                          "line": 57,
4389                          "column": 45
4390                        }
4391                      }
4392                    },
4393                    {
4394                      "type": "Identifier",
4395                      "name": "b",
4396                      "typeAnnotation": {
4397                        "type": "TSStringKeyword",
4398                        "loc": {
4399                          "start": {
4400                            "line": 57,
4401                            "column": 56
4402                          },
4403                          "end": {
4404                            "line": 57,
4405                            "column": 62
4406                          }
4407                        }
4408                      },
4409                      "loc": {
4410                        "start": {
4411                          "line": 57,
4412                          "column": 54
4413                        },
4414                        "end": {
4415                          "line": 57,
4416                          "column": 55
4417                        }
4418                      }
4419                    }
4420                  ],
4421                  "typeParameters": {
4422                    "type": "TSTypeParameterDeclaration",
4423                    "params": [
4424                      {
4425                        "type": "TSTypeParameter",
4426                        "name": {
4427                          "type": "Identifier",
4428                          "name": "R",
4429                          "loc": {
4430                            "start": {
4431                              "line": 57,
4432                              "column": 41
4433                            },
4434                            "end": {
4435                              "line": 57,
4436                              "column": 42
4437                            }
4438                          }
4439                        },
4440                        "in": false,
4441                        "out": false,
4442                        "loc": {
4443                          "start": {
4444                            "line": 57,
4445                            "column": 41
4446                          },
4447                          "end": {
4448                            "line": 57,
4449                            "column": 43
4450                          }
4451                        }
4452                      }
4453                    ],
4454                    "loc": {
4455                      "start": {
4456                        "line": 57,
4457                        "column": 40
4458                      },
4459                      "end": {
4460                        "line": 57,
4461                        "column": 43
4462                      }
4463                    }
4464                  },
4465                  "returnType": {
4466                    "type": "TSTupleType",
4467                    "elementTypes": [
4468                      {
4469                        "type": "TSNumberKeyword",
4470                        "loc": {
4471                          "start": {
4472                            "line": 57,
4473                            "column": 68
4474                          },
4475                          "end": {
4476                            "line": 57,
4477                            "column": 74
4478                          }
4479                        }
4480                      }
4481                    ],
4482                    "loc": {
4483                      "start": {
4484                        "line": 57,
4485                        "column": 67
4486                      },
4487                      "end": {
4488                        "line": 57,
4489                        "column": 75
4490                      }
4491                    }
4492                  },
4493                  "loc": {
4494                    "start": {
4495                      "line": 57,
4496                      "column": 40
4497                    },
4498                    "end": {
4499                      "line": 57,
4500                      "column": 75
4501                    }
4502                  }
4503                }
4504              ],
4505              "loc": {
4506                "start": {
4507                  "line": 57,
4508                  "column": 39
4509                },
4510                "end": {
4511                  "line": 57,
4512                  "column": 76
4513                }
4514              }
4515            },
4516            "loc": {
4517              "start": {
4518                "line": 57,
4519                "column": 38
4520              },
4521              "end": {
4522                "line": 57,
4523                "column": 77
4524              }
4525            }
4526          },
4527          {
4528            "type": "TSClassImplements",
4529            "expression": {
4530              "type": "Identifier",
4531              "name": "A",
4532              "loc": {
4533                "start": {
4534                  "line": 57,
4535                  "column": 78
4536                },
4537                "end": {
4538                  "line": 57,
4539                  "column": 79
4540                }
4541              }
4542            },
4543            "loc": {
4544              "start": {
4545                "line": 57,
4546                "column": 78
4547              },
4548              "end": {
4549                "line": 57,
4550                "column": 81
4551              }
4552            }
4553          }
4554        ],
4555        "constructor": {
4556          "type": "MethodDefinition",
4557          "key": {
4558            "type": "Identifier",
4559            "name": "constructor",
4560            "loc": {
4561              "start": {
4562                "line": 1,
4563                "column": 1
4564              },
4565              "end": {
4566                "line": 1,
4567                "column": 1
4568              }
4569            }
4570          },
4571          "kind": "constructor",
4572          "static": false,
4573          "optional": false,
4574          "computed": false,
4575          "value": {
4576            "type": "FunctionExpression",
4577            "function": {
4578              "type": "ScriptFunction",
4579              "id": null,
4580              "generator": false,
4581              "async": false,
4582              "expression": false,
4583              "params": [
4584                {
4585                  "type": "RestElement",
4586                  "argument": {
4587                    "type": "Identifier",
4588                    "name": "args",
4589                    "loc": {
4590                      "start": {
4591                        "line": 1,
4592                        "column": 1
4593                      },
4594                      "end": {
4595                        "line": 1,
4596                        "column": 1
4597                      }
4598                    }
4599                  },
4600                  "loc": {
4601                    "start": {
4602                      "line": 1,
4603                      "column": 1
4604                    },
4605                    "end": {
4606                      "line": 1,
4607                      "column": 1
4608                    }
4609                  }
4610                }
4611              ],
4612              "body": {
4613                "type": "BlockStatement",
4614                "statements": [
4615                  {
4616                    "type": "ExpressionStatement",
4617                    "expression": {
4618                      "type": "CallExpression",
4619                      "callee": {
4620                        "type": "Super",
4621                        "loc": {
4622                          "start": {
4623                            "line": 1,
4624                            "column": 1
4625                          },
4626                          "end": {
4627                            "line": 1,
4628                            "column": 1
4629                          }
4630                        }
4631                      },
4632                      "arguments": [
4633                        {
4634                          "type": "SpreadElement",
4635                          "argument": {
4636                            "type": "Identifier",
4637                            "name": "args",
4638                            "loc": {
4639                              "start": {
4640                                "line": 1,
4641                                "column": 1
4642                              },
4643                              "end": {
4644                                "line": 1,
4645                                "column": 1
4646                              }
4647                            }
4648                          },
4649                          "loc": {
4650                            "start": {
4651                              "line": 1,
4652                              "column": 1
4653                            },
4654                            "end": {
4655                              "line": 1,
4656                              "column": 1
4657                            }
4658                          }
4659                        }
4660                      ],
4661                      "optional": false,
4662                      "loc": {
4663                        "start": {
4664                          "line": 1,
4665                          "column": 1
4666                        },
4667                        "end": {
4668                          "line": 1,
4669                          "column": 1
4670                        }
4671                      }
4672                    },
4673                    "loc": {
4674                      "start": {
4675                        "line": 1,
4676                        "column": 1
4677                      },
4678                      "end": {
4679                        "line": 1,
4680                        "column": 1
4681                      }
4682                    }
4683                  }
4684                ],
4685                "loc": {
4686                  "start": {
4687                    "line": 1,
4688                    "column": 1
4689                  },
4690                  "end": {
4691                    "line": 1,
4692                    "column": 1
4693                  }
4694                }
4695              },
4696              "loc": {
4697                "start": {
4698                  "line": 1,
4699                  "column": 1
4700                },
4701                "end": {
4702                  "line": 1,
4703                  "column": 1
4704                }
4705              }
4706            },
4707            "loc": {
4708              "start": {
4709                "line": 1,
4710                "column": 1
4711              },
4712              "end": {
4713                "line": 1,
4714                "column": 1
4715              }
4716            }
4717          },
4718          "overloads": [],
4719          "decorators": [],
4720          "annotations": [],
4721          "loc": {
4722            "start": {
4723              "line": 57,
4724              "column": 1
4725            },
4726            "end": {
4727              "line": 59,
4728              "column": 2
4729            }
4730          }
4731        },
4732        "body": [],
4733        "indexSignatures": [],
4734        "loc": {
4735          "start": {
4736            "line": 57,
4737            "column": 80
4738          },
4739          "end": {
4740            "line": 59,
4741            "column": 2
4742          }
4743        }
4744      },
4745      "decorators": [],
4746      "isAnnotationDeclaration": false,
4747      "loc": {
4748        "start": {
4749          "line": 57,
4750          "column": 1
4751        },
4752        "end": {
4753          "line": 59,
4754          "column": 2
4755        }
4756      }
4757    },
4758    {
4759      "type": "VariableDeclaration",
4760      "declarations": [
4761        {
4762          "type": "VariableDeclarator",
4763          "id": {
4764            "type": "Identifier",
4765            "name": "a",
4766            "typeAnnotation": {
4767              "type": "TSConstructorType",
4768              "params": [],
4769              "typeParameters": {
4770                "type": "TSTypeParameterDeclaration",
4771                "params": [
4772                  {
4773                    "type": "TSTypeParameter",
4774                    "name": {
4775                      "type": "Identifier",
4776                      "name": "A",
4777                      "loc": {
4778                        "start": {
4779                          "line": 61,
4780                          "column": 13
4781                        },
4782                        "end": {
4783                          "line": 61,
4784                          "column": 14
4785                        }
4786                      }
4787                    },
4788                    "in": false,
4789                    "out": false,
4790                    "loc": {
4791                      "start": {
4792                        "line": 61,
4793                        "column": 13
4794                      },
4795                      "end": {
4796                        "line": 61,
4797                        "column": 15
4798                      }
4799                    }
4800                  }
4801                ],
4802                "loc": {
4803                  "start": {
4804                    "line": 61,
4805                    "column": 12
4806                  },
4807                  "end": {
4808                    "line": 61,
4809                    "column": 15
4810                  }
4811                }
4812              },
4813              "returnType": {
4814                "type": "TSFunctionType",
4815                "params": [],
4816                "typeParameters": {
4817                  "type": "TSTypeParameterDeclaration",
4818                  "params": [
4819                    {
4820                      "type": "TSTypeParameter",
4821                      "name": {
4822                        "type": "Identifier",
4823                        "name": "B",
4824                        "loc": {
4825                          "start": {
4826                            "line": 61,
4827                            "column": 22
4828                          },
4829                          "end": {
4830                            "line": 61,
4831                            "column": 23
4832                          }
4833                        }
4834                      },
4835                      "in": false,
4836                      "out": false,
4837                      "loc": {
4838                        "start": {
4839                          "line": 61,
4840                          "column": 22
4841                        },
4842                        "end": {
4843                          "line": 61,
4844                          "column": 24
4845                        }
4846                      }
4847                    }
4848                  ],
4849                  "loc": {
4850                    "start": {
4851                      "line": 61,
4852                      "column": 21
4853                    },
4854                    "end": {
4855                      "line": 61,
4856                      "column": 24
4857                    }
4858                  }
4859                },
4860                "returnType": {
4861                  "type": "TSStringKeyword",
4862                  "loc": {
4863                    "start": {
4864                      "line": 61,
4865                      "column": 30
4866                    },
4867                    "end": {
4868                      "line": 61,
4869                      "column": 36
4870                    }
4871                  }
4872                },
4873                "loc": {
4874                  "start": {
4875                    "line": 61,
4876                    "column": 21
4877                  },
4878                  "end": {
4879                    "line": 61,
4880                    "column": 36
4881                  }
4882                }
4883              },
4884              "loc": {
4885                "start": {
4886                  "line": 61,
4887                  "column": 8
4888                },
4889                "end": {
4890                  "line": 61,
4891                  "column": 36
4892                }
4893              }
4894            },
4895            "loc": {
4896              "start": {
4897                "line": 61,
4898                "column": 5
4899              },
4900              "end": {
4901                "line": 61,
4902                "column": 6
4903              }
4904            }
4905          },
4906          "init": null,
4907          "loc": {
4908            "start": {
4909              "line": 61,
4910              "column": 5
4911            },
4912            "end": {
4913              "line": 61,
4914              "column": 6
4915            }
4916          }
4917        }
4918      ],
4919      "kind": "var",
4920      "loc": {
4921        "start": {
4922          "line": 61,
4923          "column": 1
4924        },
4925        "end": {
4926          "line": 61,
4927          "column": 37
4928        }
4929      }
4930    },
4931    {
4932      "type": "VariableDeclaration",
4933      "declarations": [
4934        {
4935          "type": "VariableDeclarator",
4936          "id": {
4937            "type": "Identifier",
4938            "name": "b",
4939            "typeAnnotation": {
4940              "type": "TSFunctionType",
4941              "params": [
4942                {
4943                  "type": "Identifier",
4944                  "name": "a",
4945                  "typeAnnotation": {
4946                    "type": "TSUnionType",
4947                    "types": [
4948                      {
4949                        "type": "TSNumberKeyword",
4950                        "loc": {
4951                          "start": {
4952                            "line": 62,
4953                            "column": 32
4954                          },
4955                          "end": {
4956                            "line": 62,
4957                            "column": 38
4958                          }
4959                        }
4960                      },
4961                      {
4962                        "type": "TSStringKeyword",
4963                        "loc": {
4964                          "start": {
4965                            "line": 62,
4966                            "column": 41
4967                          },
4968                          "end": {
4969                            "line": 62,
4970                            "column": 47
4971                          }
4972                        }
4973                      }
4974                    ],
4975                    "loc": {
4976                      "start": {
4977                        "line": 62,
4978                        "column": 32
4979                      },
4980                      "end": {
4981                        "line": 62,
4982                        "column": 47
4983                      }
4984                    }
4985                  },
4986                  "loc": {
4987                    "start": {
4988                      "line": 62,
4989                      "column": 29
4990                    },
4991                    "end": {
4992                      "line": 62,
4993                      "column": 30
4994                    }
4995                  }
4996                }
4997              ],
4998              "typeParameters": {
4999                "type": "TSTypeParameterDeclaration",
5000                "params": [
5001                  {
5002                    "type": "TSTypeParameter",
5003                    "name": {
5004                      "type": "Identifier",
5005                      "name": "A",
5006                      "loc": {
5007                        "start": {
5008                          "line": 62,
5009                          "column": 9
5010                        },
5011                        "end": {
5012                          "line": 62,
5013                          "column": 10
5014                        }
5015                      }
5016                    },
5017                    "constraint": {
5018                      "type": "TSTypeReference",
5019                      "typeName": {
5020                        "type": "Identifier",
5021                        "name": "T",
5022                        "loc": {
5023                          "start": {
5024                            "line": 62,
5025                            "column": 19
5026                          },
5027                          "end": {
5028                            "line": 62,
5029                            "column": 20
5030                          }
5031                        }
5032                      },
5033                      "loc": {
5034                        "start": {
5035                          "line": 62,
5036                          "column": 19
5037                        },
5038                        "end": {
5039                          "line": 62,
5040                          "column": 20
5041                        }
5042                      }
5043                    },
5044                    "in": false,
5045                    "out": false,
5046                    "loc": {
5047                      "start": {
5048                        "line": 62,
5049                        "column": 9
5050                      },
5051                      "end": {
5052                        "line": 62,
5053                        "column": 21
5054                      }
5055                    }
5056                  },
5057                  {
5058                    "type": "TSTypeParameter",
5059                    "name": {
5060                      "type": "Identifier",
5061                      "name": "U",
5062                      "loc": {
5063                        "start": {
5064                          "line": 62,
5065                          "column": 22
5066                        },
5067                        "end": {
5068                          "line": 62,
5069                          "column": 23
5070                        }
5071                      }
5072                    },
5073                    "default": {
5074                      "type": "TSLiteralType",
5075                      "literal": {
5076                        "type": "NumberLiteral",
5077                        "value": 5,
5078                        "loc": {
5079                          "start": {
5080                            "line": 62,
5081                            "column": 26
5082                          },
5083                          "end": {
5084                            "line": 62,
5085                            "column": 27
5086                          }
5087                        }
5088                      },
5089                      "loc": {
5090                        "start": {
5091                          "line": 62,
5092                          "column": 26
5093                        },
5094                        "end": {
5095                          "line": 62,
5096                          "column": 27
5097                        }
5098                      }
5099                    },
5100                    "in": false,
5101                    "out": false,
5102                    "loc": {
5103                      "start": {
5104                        "line": 62,
5105                        "column": 22
5106                      },
5107                      "end": {
5108                        "line": 62,
5109                        "column": 28
5110                      }
5111                    }
5112                  }
5113                ],
5114                "loc": {
5115                  "start": {
5116                    "line": 62,
5117                    "column": 8
5118                  },
5119                  "end": {
5120                    "line": 62,
5121                    "column": 28
5122                  }
5123                }
5124              },
5125              "returnType": {
5126                "type": "TSTypeLiteral",
5127                "members": [
5128                  {
5129                    "type": "TSPropertySignature",
5130                    "computed": false,
5131                    "optional": false,
5132                    "readonly": false,
5133                    "key": {
5134                      "type": "Identifier",
5135                      "name": "a",
5136                      "loc": {
5137                        "start": {
5138                          "line": 62,
5139                          "column": 54
5140                        },
5141                        "end": {
5142                          "line": 62,
5143                          "column": 55
5144                        }
5145                      }
5146                    },
5147                    "typeAnnotation": {
5148                      "type": "TSNumberKeyword",
5149                      "loc": {
5150                        "start": {
5151                          "line": 62,
5152                          "column": 57
5153                        },
5154                        "end": {
5155                          "line": 62,
5156                          "column": 63
5157                        }
5158                      }
5159                    },
5160                    "loc": {
5161                      "start": {
5162                        "line": 62,
5163                        "column": 54
5164                      },
5165                      "end": {
5166                        "line": 62,
5167                        "column": 65
5168                      }
5169                    }
5170                  }
5171                ],
5172                "loc": {
5173                  "start": {
5174                    "line": 62,
5175                    "column": 52
5176                  },
5177                  "end": {
5178                    "line": 62,
5179                    "column": 65
5180                  }
5181                }
5182              },
5183              "loc": {
5184                "start": {
5185                  "line": 62,
5186                  "column": 8
5187                },
5188                "end": {
5189                  "line": 62,
5190                  "column": 65
5191                }
5192              }
5193            },
5194            "loc": {
5195              "start": {
5196                "line": 62,
5197                "column": 5
5198              },
5199              "end": {
5200                "line": 62,
5201                "column": 6
5202              }
5203            }
5204          },
5205          "init": null,
5206          "loc": {
5207            "start": {
5208              "line": 62,
5209              "column": 5
5210            },
5211            "end": {
5212              "line": 62,
5213              "column": 6
5214            }
5215          }
5216        }
5217      ],
5218      "kind": "var",
5219      "loc": {
5220        "start": {
5221          "line": 62,
5222          "column": 1
5223        },
5224        "end": {
5225          "line": 62,
5226          "column": 66
5227        }
5228      }
5229    },
5230    {
5231      "type": "VariableDeclaration",
5232      "declarations": [
5233        {
5234          "type": "VariableDeclarator",
5235          "id": {
5236            "type": "Identifier",
5237            "name": "c",
5238            "typeAnnotation": {
5239              "type": "TSIndexedAccessType",
5240              "objectType": {
5241                "type": "TSTypeReference",
5242                "typeName": {
5243                  "type": "TSQualifiedName",
5244                  "left": {
5245                    "type": "Identifier",
5246                    "name": "B",
5247                    "loc": {
5248                      "start": {
5249                        "line": 64,
5250                        "column": 8
5251                      },
5252                      "end": {
5253                        "line": 64,
5254                        "column": 9
5255                      }
5256                    }
5257                  },
5258                  "right": {
5259                    "type": "Identifier",
5260                    "name": "T",
5261                    "loc": {
5262                      "start": {
5263                        "line": 64,
5264                        "column": 10
5265                      },
5266                      "end": {
5267                        "line": 64,
5268                        "column": 11
5269                      }
5270                    }
5271                  },
5272                  "loc": {
5273                    "start": {
5274                      "line": 64,
5275                      "column": 8
5276                    },
5277                    "end": {
5278                      "line": 64,
5279                      "column": 12
5280                    }
5281                  }
5282                },
5283                "typeParameters": {
5284                  "type": "TSTypeParameterInstantiation",
5285                  "params": [
5286                    {
5287                      "type": "TSTypeReference",
5288                      "typeName": {
5289                        "type": "Identifier",
5290                        "name": "A",
5291                        "loc": {
5292                          "start": {
5293                            "line": 64,
5294                            "column": 12
5295                          },
5296                          "end": {
5297                            "line": 64,
5298                            "column": 13
5299                          }
5300                        }
5301                      },
5302                      "typeParameters": {
5303                        "type": "TSTypeParameterInstantiation",
5304                        "params": [
5305                          {
5306                            "type": "TSTypeReference",
5307                            "typeName": {
5308                              "type": "Identifier",
5309                              "name": "C",
5310                              "loc": {
5311                                "start": {
5312                                  "line": 64,
5313                                  "column": 14
5314                                },
5315                                "end": {
5316                                  "line": 64,
5317                                  "column": 15
5318                                }
5319                              }
5320                            },
5321                            "typeParameters": {
5322                              "type": "TSTypeParameterInstantiation",
5323                              "params": [
5324                                {
5325                                  "type": "TSNumberKeyword",
5326                                  "loc": {
5327                                    "start": {
5328                                      "line": 64,
5329                                      "column": 16
5330                                    },
5331                                    "end": {
5332                                      "line": 64,
5333                                      "column": 22
5334                                    }
5335                                  }
5336                                }
5337                              ],
5338                              "loc": {
5339                                "start": {
5340                                  "line": 64,
5341                                  "column": 15
5342                                },
5343                                "end": {
5344                                  "line": 64,
5345                                  "column": 25
5346                                }
5347                              }
5348                            },
5349                            "loc": {
5350                              "start": {
5351                                "line": 64,
5352                                "column": 14
5353                              },
5354                              "end": {
5355                                "line": 64,
5356                                "column": 15
5357                              }
5358                            }
5359                          }
5360                        ],
5361                        "loc": {
5362                          "start": {
5363                            "line": 64,
5364                            "column": 13
5365                          },
5366                          "end": {
5367                            "line": 64,
5368                            "column": 25
5369                          }
5370                        }
5371                      },
5372                      "loc": {
5373                        "start": {
5374                          "line": 64,
5375                          "column": 12
5376                        },
5377                        "end": {
5378                          "line": 64,
5379                          "column": 13
5380                        }
5381                      }
5382                    }
5383                  ],
5384                  "loc": {
5385                    "start": {
5386                      "line": 64,
5387                      "column": 11
5388                    },
5389                    "end": {
5390                      "line": 64,
5391                      "column": 25
5392                    }
5393                  }
5394                },
5395                "loc": {
5396                  "start": {
5397                    "line": 64,
5398                    "column": 8
5399                  },
5400                  "end": {
5401                    "line": 64,
5402                    "column": 26
5403                  }
5404                }
5405              },
5406              "indexType": {
5407                "type": "TSLiteralType",
5408                "literal": {
5409                  "type": "NumberLiteral",
5410                  "value": 0,
5411                  "loc": {
5412                    "start": {
5413                      "line": 64,
5414                      "column": 26
5415                    },
5416                    "end": {
5417                      "line": 64,
5418                      "column": 27
5419                    }
5420                  }
5421                },
5422                "loc": {
5423                  "start": {
5424                    "line": 64,
5425                    "column": 26
5426                  },
5427                  "end": {
5428                    "line": 64,
5429                    "column": 27
5430                  }
5431                }
5432              },
5433              "loc": {
5434                "start": {
5435                  "line": 64,
5436                  "column": 8
5437                },
5438                "end": {
5439                  "line": 64,
5440                  "column": 29
5441                }
5442              }
5443            },
5444            "loc": {
5445              "start": {
5446                "line": 64,
5447                "column": 5
5448              },
5449              "end": {
5450                "line": 64,
5451                "column": 6
5452              }
5453            }
5454          },
5455          "init": null,
5456          "loc": {
5457            "start": {
5458              "line": 64,
5459              "column": 5
5460            },
5461            "end": {
5462              "line": 64,
5463              "column": 6
5464            }
5465          }
5466        }
5467      ],
5468      "kind": "var",
5469      "loc": {
5470        "start": {
5471          "line": 64,
5472          "column": 1
5473        },
5474        "end": {
5475          "line": 64,
5476          "column": 29
5477        }
5478      }
5479    },
5480    {
5481      "type": "VariableDeclaration",
5482      "declarations": [
5483        {
5484          "type": "VariableDeclarator",
5485          "id": {
5486            "type": "Identifier",
5487            "name": "d",
5488            "typeAnnotation": {
5489              "type": "TSTypeReference",
5490              "typeName": {
5491                "type": "Identifier",
5492                "name": "A",
5493                "loc": {
5494                  "start": {
5495                    "line": 65,
5496                    "column": 8
5497                  },
5498                  "end": {
5499                    "line": 65,
5500                    "column": 9
5501                  }
5502                }
5503              },
5504              "typeParameters": {
5505                "type": "TSTypeParameterInstantiation",
5506                "params": [
5507                  {
5508                    "type": "TSNumberKeyword",
5509                    "loc": {
5510                      "start": {
5511                        "line": 65,
5512                        "column": 10
5513                      },
5514                      "end": {
5515                        "line": 65,
5516                        "column": 16
5517                      }
5518                    }
5519                  },
5520                  {
5521                    "type": "TSTypeLiteral",
5522                    "members": [
5523                      {
5524                        "type": "TSPropertySignature",
5525                        "computed": false,
5526                        "optional": false,
5527                        "readonly": false,
5528                        "key": {
5529                          "type": "Identifier",
5530                          "name": "a",
5531                          "loc": {
5532                            "start": {
5533                              "line": 65,
5534                              "column": 20
5535                            },
5536                            "end": {
5537                              "line": 65,
5538                              "column": 21
5539                            }
5540                          }
5541                        },
5542                        "typeAnnotation": {
5543                          "type": "TSNumberKeyword",
5544                          "loc": {
5545                            "start": {
5546                              "line": 65,
5547                              "column": 23
5548                            },
5549                            "end": {
5550                              "line": 65,
5551                              "column": 29
5552                            }
5553                          }
5554                        },
5555                        "loc": {
5556                          "start": {
5557                            "line": 65,
5558                            "column": 20
5559                          },
5560                          "end": {
5561                            "line": 65,
5562                            "column": 30
5563                          }
5564                        }
5565                      },
5566                      {
5567                        "type": "TSPropertySignature",
5568                        "computed": false,
5569                        "optional": false,
5570                        "readonly": false,
5571                        "key": {
5572                          "type": "Identifier",
5573                          "name": "b",
5574                          "loc": {
5575                            "start": {
5576                              "line": 65,
5577                              "column": 31
5578                            },
5579                            "end": {
5580                              "line": 65,
5581                              "column": 32
5582                            }
5583                          }
5584                        },
5585                        "typeAnnotation": {
5586                          "type": "TSStringKeyword",
5587                          "loc": {
5588                            "start": {
5589                              "line": 65,
5590                              "column": 34
5591                            },
5592                            "end": {
5593                              "line": 65,
5594                              "column": 40
5595                            }
5596                          }
5597                        },
5598                        "loc": {
5599                          "start": {
5600                            "line": 65,
5601                            "column": 31
5602                          },
5603                          "end": {
5604                            "line": 65,
5605                            "column": 42
5606                          }
5607                        }
5608                      }
5609                    ],
5610                    "loc": {
5611                      "start": {
5612                        "line": 65,
5613                        "column": 18
5614                      },
5615                      "end": {
5616                        "line": 65,
5617                        "column": 42
5618                      }
5619                    }
5620                  },
5621                  {
5622                    "type": "TSTupleType",
5623                    "elementTypes": [
5624                      {
5625                        "type": "TSNumberKeyword",
5626                        "loc": {
5627                          "start": {
5628                            "line": 65,
5629                            "column": 45
5630                          },
5631                          "end": {
5632                            "line": 65,
5633                            "column": 51
5634                          }
5635                        }
5636                      },
5637                      {
5638                        "type": "TSStringKeyword",
5639                        "loc": {
5640                          "start": {
5641                            "line": 65,
5642                            "column": 53
5643                          },
5644                          "end": {
5645                            "line": 65,
5646                            "column": 59
5647                          }
5648                        }
5649                      }
5650                    ],
5651                    "loc": {
5652                      "start": {
5653                        "line": 65,
5654                        "column": 44
5655                      },
5656                      "end": {
5657                        "line": 65,
5658                        "column": 60
5659                      }
5660                    }
5661                  }
5662                ],
5663                "loc": {
5664                  "start": {
5665                    "line": 65,
5666                    "column": 9
5667                  },
5668                  "end": {
5669                    "line": 65,
5670                    "column": 61
5671                  }
5672                }
5673              },
5674              "loc": {
5675                "start": {
5676                  "line": 65,
5677                  "column": 8
5678                },
5679                "end": {
5680                  "line": 65,
5681                  "column": 9
5682                }
5683              }
5684            },
5685            "loc": {
5686              "start": {
5687                "line": 65,
5688                "column": 5
5689              },
5690              "end": {
5691                "line": 65,
5692                "column": 6
5693              }
5694            }
5695          },
5696          "init": null,
5697          "loc": {
5698            "start": {
5699              "line": 65,
5700              "column": 5
5701            },
5702            "end": {
5703              "line": 65,
5704              "column": 6
5705            }
5706          }
5707        }
5708      ],
5709      "kind": "var",
5710      "loc": {
5711        "start": {
5712          "line": 65,
5713          "column": 1
5714        },
5715        "end": {
5716          "line": 65,
5717          "column": 62
5718        }
5719      }
5720    },
5721    {
5722      "type": "VariableDeclaration",
5723      "declarations": [
5724        {
5725          "type": "VariableDeclarator",
5726          "id": {
5727            "type": "Identifier",
5728            "name": "e",
5729            "typeAnnotation": {
5730              "type": "TSTypeReference",
5731              "typeName": {
5732                "type": "Identifier",
5733                "name": "T",
5734                "loc": {
5735                  "start": {
5736                    "line": 66,
5737                    "column": 8
5738                  },
5739                  "end": {
5740                    "line": 66,
5741                    "column": 9
5742                  }
5743                }
5744              },
5745              "typeParameters": {
5746                "type": "TSTypeParameterInstantiation",
5747                "params": [
5748                  {
5749                    "type": "TSFunctionType",
5750                    "params": [],
5751                    "typeParameters": {
5752                      "type": "TSTypeParameterDeclaration",
5753                      "params": [
5754                        {
5755                          "type": "TSTypeParameter",
5756                          "name": {
5757                            "type": "Identifier",
5758                            "name": "A",
5759                            "loc": {
5760                              "start": {
5761                                "line": 66,
5762                                "column": 11
5763                              },
5764                              "end": {
5765                                "line": 66,
5766                                "column": 12
5767                              }
5768                            }
5769                          },
5770                          "in": false,
5771                          "out": false,
5772                          "loc": {
5773                            "start": {
5774                              "line": 66,
5775                              "column": 11
5776                            },
5777                            "end": {
5778                              "line": 66,
5779                              "column": 13
5780                            }
5781                          }
5782                        }
5783                      ],
5784                      "loc": {
5785                        "start": {
5786                          "line": 66,
5787                          "column": 10
5788                        },
5789                        "end": {
5790                          "line": 66,
5791                          "column": 13
5792                        }
5793                      }
5794                    },
5795                    "returnType": {
5796                      "type": "TSTypeLiteral",
5797                      "members": [],
5798                      "loc": {
5799                        "start": {
5800                          "line": 66,
5801                          "column": 19
5802                        },
5803                        "end": {
5804                          "line": 66,
5805                          "column": 21
5806                        }
5807                      }
5808                    },
5809                    "loc": {
5810                      "start": {
5811                        "line": 66,
5812                        "column": 10
5813                      },
5814                      "end": {
5815                        "line": 66,
5816                        "column": 21
5817                      }
5818                    }
5819                  }
5820                ],
5821                "loc": {
5822                  "start": {
5823                    "line": 66,
5824                    "column": 9
5825                  },
5826                  "end": {
5827                    "line": 66,
5828                    "column": 22
5829                  }
5830                }
5831              },
5832              "loc": {
5833                "start": {
5834                  "line": 66,
5835                  "column": 8
5836                },
5837                "end": {
5838                  "line": 66,
5839                  "column": 9
5840                }
5841              }
5842            },
5843            "loc": {
5844              "start": {
5845                "line": 66,
5846                "column": 5
5847              },
5848              "end": {
5849                "line": 66,
5850                "column": 6
5851              }
5852            }
5853          },
5854          "init": null,
5855          "loc": {
5856            "start": {
5857              "line": 66,
5858              "column": 5
5859            },
5860            "end": {
5861              "line": 66,
5862              "column": 6
5863            }
5864          }
5865        }
5866      ],
5867      "kind": "var",
5868      "loc": {
5869        "start": {
5870          "line": 66,
5871          "column": 1
5872        },
5873        "end": {
5874          "line": 66,
5875          "column": 23
5876        }
5877      }
5878    },
5879    {
5880      "type": "TSTypeAliasDeclaration",
5881      "id": {
5882        "type": "Identifier",
5883        "name": "E",
5884        "loc": {
5885          "start": {
5886            "line": 68,
5887            "column": 6
5888          },
5889          "end": {
5890            "line": 68,
5891            "column": 7
5892          }
5893        }
5894      },
5895      "typeAnnotation": {
5896        "type": "TSUnionType",
5897        "types": [
5898          {
5899            "type": "TSNumberKeyword",
5900            "loc": {
5901              "start": {
5902                "line": 68,
5903                "column": 38
5904              },
5905              "end": {
5906                "line": 68,
5907                "column": 44
5908              }
5909            }
5910          },
5911          {
5912            "type": "TSTypeReference",
5913            "typeName": {
5914              "type": "Identifier",
5915              "name": "T",
5916              "loc": {
5917                "start": {
5918                  "line": 68,
5919                  "column": 47
5920                },
5921                "end": {
5922                  "line": 68,
5923                  "column": 48
5924                }
5925              }
5926            },
5927            "loc": {
5928              "start": {
5929                "line": 68,
5930                "column": 47
5931              },
5932              "end": {
5933                "line": 68,
5934                "column": 48
5935              }
5936            }
5937          },
5938          {
5939            "type": "TSStringKeyword",
5940            "loc": {
5941              "start": {
5942                "line": 68,
5943                "column": 51
5944              },
5945              "end": {
5946                "line": 68,
5947                "column": 57
5948              }
5949            }
5950          }
5951        ],
5952        "loc": {
5953          "start": {
5954            "line": 68,
5955            "column": 38
5956          },
5957          "end": {
5958            "line": 68,
5959            "column": 57
5960          }
5961        }
5962      },
5963      "typeParameters": {
5964        "type": "TSTypeParameterDeclaration",
5965        "params": [
5966          {
5967            "type": "TSTypeParameter",
5968            "name": {
5969              "type": "Identifier",
5970              "name": "R",
5971              "loc": {
5972                "start": {
5973                  "line": 68,
5974                  "column": 8
5975                },
5976                "end": {
5977                  "line": 68,
5978                  "column": 9
5979                }
5980              }
5981            },
5982            "constraint": {
5983              "type": "TSTypeReference",
5984              "typeName": {
5985                "type": "Identifier",
5986                "name": "B",
5987                "loc": {
5988                  "start": {
5989                    "line": 68,
5990                    "column": 18
5991                  },
5992                  "end": {
5993                    "line": 68,
5994                    "column": 19
5995                  }
5996                }
5997              },
5998              "loc": {
5999                "start": {
6000                  "line": 68,
6001                  "column": 18
6002                },
6003                "end": {
6004                  "line": 68,
6005                  "column": 19
6006                }
6007              }
6008            },
6009            "in": false,
6010            "out": false,
6011            "loc": {
6012              "start": {
6013                "line": 68,
6014                "column": 8
6015              },
6016              "end": {
6017                "line": 68,
6018                "column": 20
6019              }
6020            }
6021          },
6022          {
6023            "type": "TSTypeParameter",
6024            "name": {
6025              "type": "Identifier",
6026              "name": "C",
6027              "loc": {
6028                "start": {
6029                  "line": 68,
6030                  "column": 21
6031                },
6032                "end": {
6033                  "line": 68,
6034                  "column": 22
6035                }
6036              }
6037            },
6038            "in": false,
6039            "out": false,
6040            "loc": {
6041              "start": {
6042                "line": 68,
6043                "column": 21
6044              },
6045              "end": {
6046                "line": 68,
6047                "column": 23
6048              }
6049            }
6050          },
6051          {
6052            "type": "TSTypeParameter",
6053            "name": {
6054              "type": "Identifier",
6055              "name": "T",
6056              "loc": {
6057                "start": {
6058                  "line": 68,
6059                  "column": 24
6060                },
6061                "end": {
6062                  "line": 68,
6063                  "column": 25
6064                }
6065              }
6066            },
6067            "default": {
6068              "type": "TSNumberKeyword",
6069              "loc": {
6070                "start": {
6071                  "line": 68,
6072                  "column": 28
6073                },
6074                "end": {
6075                  "line": 68,
6076                  "column": 34
6077                }
6078              }
6079            },
6080            "in": false,
6081            "out": false,
6082            "loc": {
6083              "start": {
6084                "line": 68,
6085                "column": 24
6086              },
6087              "end": {
6088                "line": 68,
6089                "column": 35
6090              }
6091            }
6092          }
6093        ],
6094        "loc": {
6095          "start": {
6096            "line": 68,
6097            "column": 7
6098          },
6099          "end": {
6100            "line": 68,
6101            "column": 35
6102          }
6103        }
6104      },
6105      "loc": {
6106        "start": {
6107          "line": 68,
6108          "column": 1
6109        },
6110        "end": {
6111          "line": 68,
6112          "column": 58
6113        }
6114      }
6115    },
6116    {
6117      "type": "TSTypeAliasDeclaration",
6118      "id": {
6119        "type": "Identifier",
6120        "name": "P",
6121        "loc": {
6122          "start": {
6123            "line": 69,
6124            "column": 6
6125          },
6126          "end": {
6127            "line": 69,
6128            "column": 7
6129          }
6130        }
6131      },
6132      "typeAnnotation": {
6133        "type": "TSTypeLiteral",
6134        "members": [
6135          {
6136            "type": "TSPropertySignature",
6137            "computed": false,
6138            "optional": false,
6139            "readonly": false,
6140            "key": {
6141              "type": "Identifier",
6142              "name": "a",
6143              "loc": {
6144                "start": {
6145                  "line": 69,
6146                  "column": 52
6147                },
6148                "end": {
6149                  "line": 69,
6150                  "column": 53
6151                }
6152              }
6153            },
6154            "typeAnnotation": {
6155              "type": "TSTypeReference",
6156              "typeName": {
6157                "type": "Identifier",
6158                "name": "K",
6159                "loc": {
6160                  "start": {
6161                    "line": 69,
6162                    "column": 54
6163                  },
6164                  "end": {
6165                    "line": 69,
6166                    "column": 55
6167                  }
6168                }
6169              },
6170              "loc": {
6171                "start": {
6172                  "line": 69,
6173                  "column": 54
6174                },
6175                "end": {
6176                  "line": 69,
6177                  "column": 55
6178                }
6179              }
6180            },
6181            "loc": {
6182              "start": {
6183                "line": 69,
6184                "column": 52
6185              },
6186              "end": {
6187                "line": 69,
6188                "column": 56
6189              }
6190            }
6191          },
6192          {
6193            "type": "TSPropertySignature",
6194            "computed": false,
6195            "optional": false,
6196            "readonly": false,
6197            "key": {
6198              "type": "Identifier",
6199              "name": "b",
6200              "loc": {
6201                "start": {
6202                  "line": 69,
6203                  "column": 57
6204                },
6205                "end": {
6206                  "line": 69,
6207                  "column": 58
6208                }
6209              }
6210            },
6211            "typeAnnotation": {
6212              "type": "TSTypeReference",
6213              "typeName": {
6214                "type": "Identifier",
6215                "name": "Q",
6216                "loc": {
6217                  "start": {
6218                    "line": 69,
6219                    "column": 59
6220                  },
6221                  "end": {
6222                    "line": 69,
6223                    "column": 60
6224                  }
6225                }
6226              },
6227              "loc": {
6228                "start": {
6229                  "line": 69,
6230                  "column": 59
6231                },
6232                "end": {
6233                  "line": 69,
6234                  "column": 60
6235                }
6236              }
6237            },
6238            "loc": {
6239              "start": {
6240                "line": 69,
6241                "column": 57
6242              },
6243              "end": {
6244                "line": 69,
6245                "column": 61
6246              }
6247            }
6248          }
6249        ],
6250        "loc": {
6251          "start": {
6252            "line": 69,
6253            "column": 51
6254          },
6255          "end": {
6256            "line": 69,
6257            "column": 61
6258          }
6259        }
6260      },
6261      "typeParameters": {
6262        "type": "TSTypeParameterDeclaration",
6263        "params": [
6264          {
6265            "type": "TSTypeParameter",
6266            "name": {
6267              "type": "Identifier",
6268              "name": "K",
6269              "loc": {
6270                "start": {
6271                  "line": 69,
6272                  "column": 8
6273                },
6274                "end": {
6275                  "line": 69,
6276                  "column": 9
6277                }
6278              }
6279            },
6280            "in": false,
6281            "out": false,
6282            "loc": {
6283              "start": {
6284                "line": 69,
6285                "column": 8
6286              },
6287              "end": {
6288                "line": 69,
6289                "column": 10
6290              }
6291            }
6292          },
6293          {
6294            "type": "TSTypeParameter",
6295            "name": {
6296              "type": "Identifier",
6297              "name": "Q",
6298              "loc": {
6299                "start": {
6300                  "line": 69,
6301                  "column": 11
6302                },
6303                "end": {
6304                  "line": 69,
6305                  "column": 12
6306                }
6307              }
6308            },
6309            "default": {
6310              "type": "TSUnionType",
6311              "types": [
6312                {
6313                  "type": "TSTupleType",
6314                  "elementTypes": [
6315                    {
6316                      "type": "TSNumberKeyword",
6317                      "loc": {
6318                        "start": {
6319                          "line": 69,
6320                          "column": 16
6321                        },
6322                        "end": {
6323                          "line": 69,
6324                          "column": 22
6325                        }
6326                      }
6327                    },
6328                    {
6329                      "type": "TSNumberKeyword",
6330                      "loc": {
6331                        "start": {
6332                          "line": 69,
6333                          "column": 24
6334                        },
6335                        "end": {
6336                          "line": 69,
6337                          "column": 30
6338                        }
6339                      }
6340                    },
6341                    {
6342                      "type": "TSStringKeyword",
6343                      "loc": {
6344                        "start": {
6345                          "line": 69,
6346                          "column": 32
6347                        },
6348                        "end": {
6349                          "line": 69,
6350                          "column": 38
6351                        }
6352                      }
6353                    }
6354                  ],
6355                  "loc": {
6356                    "start": {
6357                      "line": 69,
6358                      "column": 15
6359                    },
6360                    "end": {
6361                      "line": 69,
6362                      "column": 39
6363                    }
6364                  }
6365                },
6366                {
6367                  "type": "TSArrayType",
6368                  "elementType": {
6369                    "type": "TSAnyKeyword",
6370                    "loc": {
6371                      "start": {
6372                        "line": 69,
6373                        "column": 42
6374                      },
6375                      "end": {
6376                        "line": 69,
6377                        "column": 45
6378                      }
6379                    }
6380                  },
6381                  "loc": {
6382                    "start": {
6383                      "line": 69,
6384                      "column": 42
6385                    },
6386                    "end": {
6387                      "line": 69,
6388                      "column": 47
6389                    }
6390                  }
6391                }
6392              ],
6393              "loc": {
6394                "start": {
6395                  "line": 69,
6396                  "column": 15
6397                },
6398                "end": {
6399                  "line": 69,
6400                  "column": 47
6401                }
6402              }
6403            },
6404            "in": false,
6405            "out": false,
6406            "loc": {
6407              "start": {
6408                "line": 69,
6409                "column": 11
6410              },
6411              "end": {
6412                "line": 69,
6413                "column": 48
6414              }
6415            }
6416          }
6417        ],
6418        "loc": {
6419          "start": {
6420            "line": 69,
6421            "column": 7
6422          },
6423          "end": {
6424            "line": 69,
6425            "column": 48
6426          }
6427        }
6428      },
6429      "loc": {
6430        "start": {
6431          "line": 69,
6432          "column": 1
6433        },
6434        "end": {
6435          "line": 69,
6436          "column": 62
6437        }
6438      }
6439    },
6440    {
6441      "type": "ExpressionStatement",
6442      "expression": {
6443        "type": "CallExpression",
6444        "callee": {
6445          "type": "Identifier",
6446          "name": "async",
6447          "loc": {
6448            "start": {
6449              "line": 71,
6450              "column": 1
6451            },
6452            "end": {
6453              "line": 71,
6454              "column": 6
6455            }
6456          }
6457        },
6458        "arguments": [],
6459        "optional": false,
6460        "typeParameters": {
6461          "type": "TSTypeParameterInstantiation",
6462          "params": [
6463            {
6464              "type": "TSFunctionType",
6465              "params": [],
6466              "typeParameters": {
6467                "type": "TSTypeParameterDeclaration",
6468                "params": [
6469                  {
6470                    "type": "TSTypeParameter",
6471                    "name": {
6472                      "type": "Identifier",
6473                      "name": "A",
6474                      "loc": {
6475                        "start": {
6476                          "line": 71,
6477                          "column": 8
6478                        },
6479                        "end": {
6480                          "line": 71,
6481                          "column": 9
6482                        }
6483                      }
6484                    },
6485                    "in": false,
6486                    "out": false,
6487                    "loc": {
6488                      "start": {
6489                        "line": 71,
6490                        "column": 8
6491                      },
6492                      "end": {
6493                        "line": 71,
6494                        "column": 10
6495                      }
6496                    }
6497                  }
6498                ],
6499                "loc": {
6500                  "start": {
6501                    "line": 71,
6502                    "column": 7
6503                  },
6504                  "end": {
6505                    "line": 71,
6506                    "column": 10
6507                  }
6508                }
6509              },
6510              "returnType": {
6511                "type": "TSTypeLiteral",
6512                "members": [],
6513                "loc": {
6514                  "start": {
6515                    "line": 71,
6516                    "column": 16
6517                  },
6518                  "end": {
6519                    "line": 71,
6520                    "column": 18
6521                  }
6522                }
6523              },
6524              "loc": {
6525                "start": {
6526                  "line": 71,
6527                  "column": 7
6528                },
6529                "end": {
6530                  "line": 71,
6531                  "column": 18
6532                }
6533              }
6534            }
6535          ],
6536          "loc": {
6537            "start": {
6538              "line": 71,
6539              "column": 6
6540            },
6541            "end": {
6542              "line": 71,
6543              "column": 19
6544            }
6545          }
6546        },
6547        "loc": {
6548          "start": {
6549            "line": 71,
6550            "column": 1
6551          },
6552          "end": {
6553            "line": 71,
6554            "column": 21
6555          }
6556        }
6557      },
6558      "loc": {
6559        "start": {
6560          "line": 71,
6561          "column": 1
6562        },
6563        "end": {
6564          "line": 71,
6565          "column": 22
6566        }
6567      }
6568    },
6569    {
6570      "type": "ExpressionStatement",
6571      "expression": {
6572        "type": "CallExpression",
6573        "callee": {
6574          "type": "Identifier",
6575          "name": "async",
6576          "loc": {
6577            "start": {
6578              "line": 72,
6579              "column": 1
6580            },
6581            "end": {
6582              "line": 72,
6583              "column": 6
6584            }
6585          }
6586        },
6587        "arguments": [],
6588        "optional": false,
6589        "typeParameters": {
6590          "type": "TSTypeParameterInstantiation",
6591          "params": [
6592            {
6593              "type": "TSNumberKeyword",
6594              "loc": {
6595                "start": {
6596                  "line": 72,
6597                  "column": 7
6598                },
6599                "end": {
6600                  "line": 72,
6601                  "column": 13
6602                }
6603              }
6604            }
6605          ],
6606          "loc": {
6607            "start": {
6608              "line": 72,
6609              "column": 6
6610            },
6611            "end": {
6612              "line": 72,
6613              "column": 14
6614            }
6615          }
6616        },
6617        "loc": {
6618          "start": {
6619            "line": 72,
6620            "column": 1
6621          },
6622          "end": {
6623            "line": 72,
6624            "column": 16
6625          }
6626        }
6627      },
6628      "loc": {
6629        "start": {
6630          "line": 72,
6631          "column": 1
6632        },
6633        "end": {
6634          "line": 72,
6635          "column": 17
6636        }
6637      }
6638    },
6639    {
6640      "type": "ExpressionStatement",
6641      "expression": {
6642        "type": "ArrowFunctionExpression",
6643        "function": {
6644          "type": "ScriptFunction",
6645          "id": null,
6646          "generator": false,
6647          "async": false,
6648          "expression": true,
6649          "params": [],
6650          "returnType": {
6651            "type": "TSNumberKeyword",
6652            "loc": {
6653              "start": {
6654                "line": 73,
6655                "column": 17
6656              },
6657              "end": {
6658                "line": 73,
6659                "column": 23
6660              }
6661            }
6662          },
6663          "typeParameters": {
6664            "type": "TSTypeParameterDeclaration",
6665            "params": [
6666              {
6667                "type": "TSTypeParameter",
6668                "name": {
6669                  "type": "Identifier",
6670                  "name": "A",
6671                  "loc": {
6672                    "start": {
6673                      "line": 73,
6674                      "column": 2
6675                    },
6676                    "end": {
6677                      "line": 73,
6678                      "column": 3
6679                    }
6680                  }
6681                },
6682                "constraint": {
6683                  "type": "TSTypeReference",
6684                  "typeName": {
6685                    "type": "Identifier",
6686                    "name": "B",
6687                    "loc": {
6688                      "start": {
6689                        "line": 73,
6690                        "column": 12
6691                      },
6692                      "end": {
6693                        "line": 73,
6694                        "column": 13
6695                      }
6696                    }
6697                  },
6698                  "loc": {
6699                    "start": {
6700                      "line": 73,
6701                      "column": 12
6702                    },
6703                    "end": {
6704                      "line": 73,
6705                      "column": 13
6706                    }
6707                  }
6708                },
6709                "in": false,
6710                "out": false,
6711                "loc": {
6712                  "start": {
6713                    "line": 73,
6714                    "column": 2
6715                  },
6716                  "end": {
6717                    "line": 73,
6718                    "column": 14
6719                  }
6720                }
6721              }
6722            ],
6723            "loc": {
6724              "start": {
6725                "line": 73,
6726                "column": 1
6727              },
6728              "end": {
6729                "line": 73,
6730                "column": 14
6731              }
6732            }
6733          },
6734          "body": {
6735            "type": "BooleanLiteral",
6736            "value": true,
6737            "loc": {
6738              "start": {
6739                "line": 73,
6740                "column": 27
6741              },
6742              "end": {
6743                "line": 73,
6744                "column": 31
6745              }
6746            }
6747          },
6748          "loc": {
6749            "start": {
6750              "line": 73,
6751              "column": 1
6752            },
6753            "end": {
6754              "line": 73,
6755              "column": 31
6756            }
6757          }
6758        },
6759        "loc": {
6760          "start": {
6761            "line": 73,
6762            "column": 1
6763          },
6764          "end": {
6765            "line": 73,
6766            "column": 31
6767          }
6768        }
6769      },
6770      "loc": {
6771        "start": {
6772          "line": 73,
6773          "column": 1
6774        },
6775        "end": {
6776          "line": 73,
6777          "column": 32
6778        }
6779      }
6780    },
6781    {
6782      "type": "ExpressionStatement",
6783      "expression": {
6784        "type": "ArrowFunctionExpression",
6785        "function": {
6786          "type": "ScriptFunction",
6787          "id": null,
6788          "generator": false,
6789          "async": true,
6790          "expression": false,
6791          "params": [],
6792          "typeParameters": {
6793            "type": "TSTypeParameterDeclaration",
6794            "params": [
6795              {
6796                "type": "TSTypeParameter",
6797                "name": {
6798                  "type": "Identifier",
6799                  "name": "A",
6800                  "loc": {
6801                    "start": {
6802                      "line": 74,
6803                      "column": 7
6804                    },
6805                    "end": {
6806                      "line": 74,
6807                      "column": 8
6808                    }
6809                  }
6810                },
6811                "constraint": {
6812                  "type": "TSTypeOperator",
6813                  "operator": "readonly",
6814                  "typeAnnotation": {
6815                    "type": "TSTupleType",
6816                    "elementTypes": [
6817                      {
6818                        "type": "TSNumberKeyword",
6819                        "loc": {
6820                          "start": {
6821                            "line": 74,
6822                            "column": 27
6823                          },
6824                          "end": {
6825                            "line": 74,
6826                            "column": 33
6827                          }
6828                        }
6829                      },
6830                      {
6831                        "type": "TSStringKeyword",
6832                        "loc": {
6833                          "start": {
6834                            "line": 74,
6835                            "column": 35
6836                          },
6837                          "end": {
6838                            "line": 74,
6839                            "column": 41
6840                          }
6841                        }
6842                      }
6843                    ],
6844                    "loc": {
6845                      "start": {
6846                        "line": 74,
6847                        "column": 26
6848                      },
6849                      "end": {
6850                        "line": 74,
6851                        "column": 42
6852                      }
6853                    }
6854                  },
6855                  "loc": {
6856                    "start": {
6857                      "line": 74,
6858                      "column": 17
6859                    },
6860                    "end": {
6861                      "line": 74,
6862                      "column": 42
6863                    }
6864                  }
6865                },
6866                "in": false,
6867                "out": false,
6868                "loc": {
6869                  "start": {
6870                    "line": 74,
6871                    "column": 7
6872                  },
6873                  "end": {
6874                    "line": 74,
6875                    "column": 43
6876                  }
6877                }
6878              }
6879            ],
6880            "loc": {
6881              "start": {
6882                "line": 74,
6883                "column": 6
6884              },
6885              "end": {
6886                "line": 74,
6887                "column": 43
6888              }
6889            }
6890          },
6891          "body": {
6892            "type": "BlockStatement",
6893            "statements": [
6894              {
6895                "type": "ReturnStatement",
6896                "argument": {
6897                  "type": "StringLiteral",
6898                  "value": "foo",
6899                  "loc": {
6900                    "start": {
6901                      "line": 74,
6902                      "column": 57
6903                    },
6904                    "end": {
6905                      "line": 74,
6906                      "column": 62
6907                    }
6908                  }
6909                },
6910                "loc": {
6911                  "start": {
6912                    "line": 74,
6913                    "column": 50
6914                  },
6915                  "end": {
6916                    "line": 74,
6917                    "column": 63
6918                  }
6919                }
6920              }
6921            ],
6922            "loc": {
6923              "start": {
6924                "line": 74,
6925                "column": 49
6926              },
6927              "end": {
6928                "line": 74,
6929                "column": 64
6930              }
6931            }
6932          },
6933          "loc": {
6934            "start": {
6935              "line": 74,
6936              "column": 1
6937            },
6938            "end": {
6939              "line": 74,
6940              "column": 64
6941            }
6942          }
6943        },
6944        "loc": {
6945          "start": {
6946            "line": 74,
6947            "column": 1
6948          },
6949          "end": {
6950            "line": 74,
6951            "column": 64
6952          }
6953        }
6954      },
6955      "loc": {
6956        "start": {
6957          "line": 74,
6958          "column": 1
6959        },
6960        "end": {
6961          "line": 74,
6962          "column": 65
6963        }
6964      }
6965    }
6966  ],
6967  "loc": {
6968    "start": {
6969      "line": 1,
6970      "column": 1
6971    },
6972    "end": {
6973      "line": 74,
6974      "column": 65
6975    }
6976  }
6977}
6978