• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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          "loc": {
3484            "start": {
3485              "line": 48,
3486              "column": 1
3487            },
3488            "end": {
3489              "line": 51,
3490              "column": 2
3491            }
3492          }
3493        },
3494        "body": [
3495          {
3496            "type": "MethodDefinition",
3497            "key": {
3498              "type": "Identifier",
3499              "name": "a",
3500              "loc": {
3501                "start": {
3502                  "line": 49,
3503                  "column": 12
3504                },
3505                "end": {
3506                  "line": 49,
3507                  "column": 13
3508                }
3509              }
3510            },
3511            "kind": "method",
3512            "accessibility": "public",
3513            "static": false,
3514            "optional": false,
3515            "computed": false,
3516            "value": {
3517              "type": "FunctionExpression",
3518              "function": {
3519                "type": "ScriptFunction",
3520                "id": null,
3521                "generator": false,
3522                "async": false,
3523                "expression": false,
3524                "params": [],
3525                "typeParameters": {
3526                  "type": "TSTypeParameterDeclaration",
3527                  "params": [
3528                    {
3529                      "type": "TSTypeParameter",
3530                      "name": {
3531                        "type": "Identifier",
3532                        "name": "T",
3533                        "loc": {
3534                          "start": {
3535                            "line": 49,
3536                            "column": 14
3537                          },
3538                          "end": {
3539                            "line": 49,
3540                            "column": 15
3541                          }
3542                        }
3543                      },
3544                      "in": false,
3545                      "out": false,
3546                      "loc": {
3547                        "start": {
3548                          "line": 49,
3549                          "column": 14
3550                        },
3551                        "end": {
3552                          "line": 49,
3553                          "column": 16
3554                        }
3555                      }
3556                    },
3557                    {
3558                      "type": "TSTypeParameter",
3559                      "name": {
3560                        "type": "Identifier",
3561                        "name": "R",
3562                        "loc": {
3563                          "start": {
3564                            "line": 49,
3565                            "column": 17
3566                          },
3567                          "end": {
3568                            "line": 49,
3569                            "column": 18
3570                          }
3571                        }
3572                      },
3573                      "in": false,
3574                      "out": false,
3575                      "loc": {
3576                        "start": {
3577                          "line": 49,
3578                          "column": 17
3579                        },
3580                        "end": {
3581                          "line": 49,
3582                          "column": 19
3583                        }
3584                      }
3585                    }
3586                  ],
3587                  "loc": {
3588                    "start": {
3589                      "line": 49,
3590                      "column": 13
3591                    },
3592                    "end": {
3593                      "line": 49,
3594                      "column": 19
3595                    }
3596                  }
3597                },
3598                "body": {
3599                  "type": "BlockStatement",
3600                  "statements": [],
3601                  "loc": {
3602                    "start": {
3603                      "line": 49,
3604                      "column": 22
3605                    },
3606                    "end": {
3607                      "line": 49,
3608                      "column": 25
3609                    }
3610                  }
3611                },
3612                "loc": {
3613                  "start": {
3614                    "line": 49,
3615                    "column": 13
3616                  },
3617                  "end": {
3618                    "line": 49,
3619                    "column": 25
3620                  }
3621                }
3622              },
3623              "loc": {
3624                "start": {
3625                  "line": 49,
3626                  "column": 13
3627                },
3628                "end": {
3629                  "line": 49,
3630                  "column": 25
3631                }
3632              }
3633            },
3634            "overloads": [],
3635            "decorators": [],
3636            "loc": {
3637              "start": {
3638                "line": 49,
3639                "column": 5
3640              },
3641              "end": {
3642                "line": 49,
3643                "column": 25
3644              }
3645            }
3646          },
3647          {
3648            "type": "MethodDefinition",
3649            "key": {
3650              "type": "Identifier",
3651              "name": "b",
3652              "loc": {
3653                "start": {
3654                  "line": 50,
3655                  "column": 13
3656                },
3657                "end": {
3658                  "line": 50,
3659                  "column": 14
3660                }
3661              }
3662            },
3663            "kind": "method",
3664            "accessibility": "private",
3665            "static": false,
3666            "optional": false,
3667            "computed": false,
3668            "value": {
3669              "type": "FunctionExpression",
3670              "function": {
3671                "type": "ScriptFunction",
3672                "id": null,
3673                "generator": false,
3674                "async": false,
3675                "expression": false,
3676                "params": [],
3677                "typeParameters": {
3678                  "type": "TSTypeParameterDeclaration",
3679                  "params": [
3680                    {
3681                      "type": "TSTypeParameter",
3682                      "name": {
3683                        "type": "Identifier",
3684                        "name": "E",
3685                        "loc": {
3686                          "start": {
3687                            "line": 50,
3688                            "column": 15
3689                          },
3690                          "end": {
3691                            "line": 50,
3692                            "column": 16
3693                          }
3694                        }
3695                      },
3696                      "constraint": {
3697                        "type": "TSFunctionType",
3698                        "params": [
3699                          {
3700                            "type": "Identifier",
3701                            "name": "a",
3702                            "typeAnnotation": {
3703                              "type": "TSNumberKeyword",
3704                              "loc": {
3705                                "start": {
3706                                  "line": 50,
3707                                  "column": 29
3708                                },
3709                                "end": {
3710                                  "line": 50,
3711                                  "column": 35
3712                                }
3713                              }
3714                            },
3715                            "loc": {
3716                              "start": {
3717                                "line": 50,
3718                                "column": 26
3719                              },
3720                              "end": {
3721                                "line": 50,
3722                                "column": 27
3723                              }
3724                            }
3725                          },
3726                          {
3727                            "type": "Identifier",
3728                            "name": "b",
3729                            "typeAnnotation": {
3730                              "type": "TSStringKeyword",
3731                              "loc": {
3732                                "start": {
3733                                  "line": 50,
3734                                  "column": 40
3735                                },
3736                                "end": {
3737                                  "line": 50,
3738                                  "column": 46
3739                                }
3740                              }
3741                            },
3742                            "loc": {
3743                              "start": {
3744                                "line": 50,
3745                                "column": 37
3746                              },
3747                              "end": {
3748                                "line": 50,
3749                                "column": 38
3750                              }
3751                            }
3752                          }
3753                        ],
3754                        "returnType": {
3755                          "type": "TSArrayType",
3756                          "elementType": {
3757                            "type": "TSAnyKeyword",
3758                            "loc": {
3759                              "start": {
3760                                "line": 50,
3761                                "column": 51
3762                              },
3763                              "end": {
3764                                "line": 50,
3765                                "column": 54
3766                              }
3767                            }
3768                          },
3769                          "loc": {
3770                            "start": {
3771                              "line": 50,
3772                              "column": 51
3773                            },
3774                            "end": {
3775                              "line": 50,
3776                              "column": 56
3777                            }
3778                          }
3779                        },
3780                        "loc": {
3781                          "start": {
3782                            "line": 50,
3783                            "column": 25
3784                          },
3785                          "end": {
3786                            "line": 50,
3787                            "column": 56
3788                          }
3789                        }
3790                      },
3791                      "in": false,
3792                      "out": false,
3793                      "loc": {
3794                        "start": {
3795                          "line": 50,
3796                          "column": 15
3797                        },
3798                        "end": {
3799                          "line": 50,
3800                          "column": 57
3801                        }
3802                      }
3803                    }
3804                  ],
3805                  "loc": {
3806                    "start": {
3807                      "line": 50,
3808                      "column": 14
3809                    },
3810                    "end": {
3811                      "line": 50,
3812                      "column": 57
3813                    }
3814                  }
3815                },
3816                "body": {
3817                  "type": "BlockStatement",
3818                  "statements": [],
3819                  "loc": {
3820                    "start": {
3821                      "line": 50,
3822                      "column": 60
3823                    },
3824                    "end": {
3825                      "line": 50,
3826                      "column": 63
3827                    }
3828                  }
3829                },
3830                "loc": {
3831                  "start": {
3832                    "line": 50,
3833                    "column": 14
3834                  },
3835                  "end": {
3836                    "line": 50,
3837                    "column": 63
3838                  }
3839                }
3840              },
3841              "loc": {
3842                "start": {
3843                  "line": 50,
3844                  "column": 14
3845                },
3846                "end": {
3847                  "line": 50,
3848                  "column": 63
3849                }
3850              }
3851            },
3852            "overloads": [],
3853            "decorators": [],
3854            "loc": {
3855              "start": {
3856                "line": 50,
3857                "column": 5
3858              },
3859              "end": {
3860                "line": 50,
3861                "column": 63
3862              }
3863            }
3864          }
3865        ],
3866        "indexSignatures": [],
3867        "loc": {
3868          "start": {
3869            "line": 48,
3870            "column": 52
3871          },
3872          "end": {
3873            "line": 51,
3874            "column": 2
3875          }
3876        }
3877      },
3878      "decorators": [],
3879      "loc": {
3880        "start": {
3881          "line": 48,
3882          "column": 1
3883        },
3884        "end": {
3885          "line": 51,
3886          "column": 2
3887        }
3888      }
3889    },
3890    {
3891      "type": "ClassDeclaration",
3892      "definition": {
3893        "id": {
3894          "type": "Identifier",
3895          "name": "W",
3896          "loc": {
3897            "start": {
3898              "line": 53,
3899              "column": 7
3900            },
3901            "end": {
3902              "line": 53,
3903              "column": 8
3904            }
3905          }
3906        },
3907        "superClass": {
3908          "type": "Identifier",
3909          "name": "T",
3910          "loc": {
3911            "start": {
3912              "line": 53,
3913              "column": 17
3914            },
3915            "end": {
3916              "line": 53,
3917              "column": 18
3918            }
3919          }
3920        },
3921        "superTypeParameters": {
3922          "type": "TSTypeParameterInstantiation",
3923          "params": [
3924            {
3925              "type": "TSFunctionType",
3926              "params": [],
3927              "typeParameters": {
3928                "type": "TSTypeParameterDeclaration",
3929                "params": [
3930                  {
3931                    "type": "TSTypeParameter",
3932                    "name": {
3933                      "type": "Identifier",
3934                      "name": "B",
3935                      "loc": {
3936                        "start": {
3937                          "line": 53,
3938                          "column": 20
3939                        },
3940                        "end": {
3941                          "line": 53,
3942                          "column": 21
3943                        }
3944                      }
3945                    },
3946                    "in": false,
3947                    "out": false,
3948                    "loc": {
3949                      "start": {
3950                        "line": 53,
3951                        "column": 20
3952                      },
3953                      "end": {
3954                        "line": 53,
3955                        "column": 22
3956                      }
3957                    }
3958                  }
3959                ],
3960                "loc": {
3961                  "start": {
3962                    "line": 53,
3963                    "column": 19
3964                  },
3965                  "end": {
3966                    "line": 53,
3967                    "column": 22
3968                  }
3969                }
3970              },
3971              "returnType": {
3972                "type": "TSNumberKeyword",
3973                "loc": {
3974                  "start": {
3975                    "line": 53,
3976                    "column": 29
3977                  },
3978                  "end": {
3979                    "line": 53,
3980                    "column": 35
3981                  }
3982                }
3983              },
3984              "loc": {
3985                "start": {
3986                  "line": 53,
3987                  "column": 19
3988                },
3989                "end": {
3990                  "line": 53,
3991                  "column": 35
3992                }
3993              }
3994            },
3995            {
3996              "type": "TSArrayType",
3997              "elementType": {
3998                "type": "TSTupleType",
3999                "elementTypes": [
4000                  {
4001                    "type": "TSUnionType",
4002                    "types": [
4003                      {
4004                        "type": "TSNumberKeyword",
4005                        "loc": {
4006                          "start": {
4007                            "line": 53,
4008                            "column": 38
4009                          },
4010                          "end": {
4011                            "line": 53,
4012                            "column": 44
4013                          }
4014                        }
4015                      },
4016                      {
4017                        "type": "TSStringKeyword",
4018                        "loc": {
4019                          "start": {
4020                            "line": 53,
4021                            "column": 47
4022                          },
4023                          "end": {
4024                            "line": 53,
4025                            "column": 53
4026                          }
4027                        }
4028                      }
4029                    ],
4030                    "loc": {
4031                      "start": {
4032                        "line": 53,
4033                        "column": 38
4034                      },
4035                      "end": {
4036                        "line": 53,
4037                        "column": 53
4038                      }
4039                    }
4040                  }
4041                ],
4042                "loc": {
4043                  "start": {
4044                    "line": 53,
4045                    "column": 37
4046                  },
4047                  "end": {
4048                    "line": 53,
4049                    "column": 54
4050                  }
4051                }
4052              },
4053              "loc": {
4054                "start": {
4055                  "line": 53,
4056                  "column": 37
4057                },
4058                "end": {
4059                  "line": 53,
4060                  "column": 56
4061                }
4062              }
4063            }
4064          ],
4065          "loc": {
4066            "start": {
4067              "line": 53,
4068              "column": 18
4069            },
4070            "end": {
4071              "line": 53,
4072              "column": 57
4073            }
4074          }
4075        },
4076        "implements": [],
4077        "constructor": {
4078          "type": "MethodDefinition",
4079          "key": {
4080            "type": "Identifier",
4081            "name": "constructor",
4082            "loc": {
4083              "start": {
4084                "line": 1,
4085                "column": 1
4086              },
4087              "end": {
4088                "line": 1,
4089                "column": 1
4090              }
4091            }
4092          },
4093          "kind": "constructor",
4094          "static": false,
4095          "optional": false,
4096          "computed": false,
4097          "value": {
4098            "type": "FunctionExpression",
4099            "function": {
4100              "type": "ScriptFunction",
4101              "id": null,
4102              "generator": false,
4103              "async": false,
4104              "expression": false,
4105              "params": [
4106                {
4107                  "type": "RestElement",
4108                  "argument": {
4109                    "type": "Identifier",
4110                    "name": "args",
4111                    "loc": {
4112                      "start": {
4113                        "line": 1,
4114                        "column": 1
4115                      },
4116                      "end": {
4117                        "line": 1,
4118                        "column": 1
4119                      }
4120                    }
4121                  },
4122                  "loc": {
4123                    "start": {
4124                      "line": 1,
4125                      "column": 1
4126                    },
4127                    "end": {
4128                      "line": 1,
4129                      "column": 1
4130                    }
4131                  }
4132                }
4133              ],
4134              "body": {
4135                "type": "BlockStatement",
4136                "statements": [
4137                  {
4138                    "type": "ExpressionStatement",
4139                    "expression": {
4140                      "type": "CallExpression",
4141                      "callee": {
4142                        "type": "Super",
4143                        "loc": {
4144                          "start": {
4145                            "line": 1,
4146                            "column": 1
4147                          },
4148                          "end": {
4149                            "line": 1,
4150                            "column": 1
4151                          }
4152                        }
4153                      },
4154                      "arguments": [
4155                        {
4156                          "type": "SpreadElement",
4157                          "argument": {
4158                            "type": "Identifier",
4159                            "name": "args",
4160                            "loc": {
4161                              "start": {
4162                                "line": 1,
4163                                "column": 1
4164                              },
4165                              "end": {
4166                                "line": 1,
4167                                "column": 1
4168                              }
4169                            }
4170                          },
4171                          "loc": {
4172                            "start": {
4173                              "line": 1,
4174                              "column": 1
4175                            },
4176                            "end": {
4177                              "line": 1,
4178                              "column": 1
4179                            }
4180                          }
4181                        }
4182                      ],
4183                      "optional": false,
4184                      "loc": {
4185                        "start": {
4186                          "line": 1,
4187                          "column": 1
4188                        },
4189                        "end": {
4190                          "line": 1,
4191                          "column": 1
4192                        }
4193                      }
4194                    },
4195                    "loc": {
4196                      "start": {
4197                        "line": 1,
4198                        "column": 1
4199                      },
4200                      "end": {
4201                        "line": 1,
4202                        "column": 1
4203                      }
4204                    }
4205                  }
4206                ],
4207                "loc": {
4208                  "start": {
4209                    "line": 1,
4210                    "column": 1
4211                  },
4212                  "end": {
4213                    "line": 1,
4214                    "column": 1
4215                  }
4216                }
4217              },
4218              "loc": {
4219                "start": {
4220                  "line": 1,
4221                  "column": 1
4222                },
4223                "end": {
4224                  "line": 1,
4225                  "column": 1
4226                }
4227              }
4228            },
4229            "loc": {
4230              "start": {
4231                "line": 1,
4232                "column": 1
4233              },
4234              "end": {
4235                "line": 1,
4236                "column": 1
4237              }
4238            }
4239          },
4240          "overloads": [],
4241          "decorators": [],
4242          "loc": {
4243            "start": {
4244              "line": 53,
4245              "column": 1
4246            },
4247            "end": {
4248              "line": 55,
4249              "column": 2
4250            }
4251          }
4252        },
4253        "body": [],
4254        "indexSignatures": [],
4255        "loc": {
4256          "start": {
4257            "line": 53,
4258            "column": 58
4259          },
4260          "end": {
4261            "line": 55,
4262            "column": 2
4263          }
4264        }
4265      },
4266      "decorators": [],
4267      "loc": {
4268        "start": {
4269          "line": 53,
4270          "column": 1
4271        },
4272        "end": {
4273          "line": 55,
4274          "column": 2
4275        }
4276      }
4277    },
4278    {
4279      "type": "ClassDeclaration",
4280      "definition": {
4281        "id": {
4282          "type": "Identifier",
4283          "name": "X",
4284          "loc": {
4285            "start": {
4286              "line": 57,
4287              "column": 7
4288            },
4289            "end": {
4290              "line": 57,
4291              "column": 8
4292            }
4293          }
4294        },
4295        "superClass": {
4296          "type": "Identifier",
4297          "name": "Q",
4298          "loc": {
4299            "start": {
4300              "line": 57,
4301              "column": 17
4302            },
4303            "end": {
4304              "line": 57,
4305              "column": 18
4306            }
4307          }
4308        },
4309        "superTypeParameters": {
4310          "type": "TSTypeParameterInstantiation",
4311          "params": [
4312            {
4313              "type": "TSNumberKeyword",
4314              "loc": {
4315                "start": {
4316                  "line": 57,
4317                  "column": 19
4318                },
4319                "end": {
4320                  "line": 57,
4321                  "column": 25
4322                }
4323              }
4324            }
4325          ],
4326          "loc": {
4327            "start": {
4328              "line": 57,
4329              "column": 18
4330            },
4331            "end": {
4332              "line": 57,
4333              "column": 26
4334            }
4335          }
4336        },
4337        "implements": [
4338          {
4339            "type": "TSClassImplements",
4340            "expression": {
4341              "type": "Identifier",
4342              "name": "S",
4343              "loc": {
4344                "start": {
4345                  "line": 57,
4346                  "column": 38
4347                },
4348                "end": {
4349                  "line": 57,
4350                  "column": 39
4351                }
4352              }
4353            },
4354            "typeParameters": {
4355              "type": "TSTypeParameterInstantiation",
4356              "params": [
4357                {
4358                  "type": "TSFunctionType",
4359                  "params": [
4360                    {
4361                      "type": "Identifier",
4362                      "name": "a",
4363                      "typeAnnotation": {
4364                        "type": "TSNumberKeyword",
4365                        "loc": {
4366                          "start": {
4367                            "line": 57,
4368                            "column": 46
4369                          },
4370                          "end": {
4371                            "line": 57,
4372                            "column": 52
4373                          }
4374                        }
4375                      },
4376                      "loc": {
4377                        "start": {
4378                          "line": 57,
4379                          "column": 44
4380                        },
4381                        "end": {
4382                          "line": 57,
4383                          "column": 45
4384                        }
4385                      }
4386                    },
4387                    {
4388                      "type": "Identifier",
4389                      "name": "b",
4390                      "typeAnnotation": {
4391                        "type": "TSStringKeyword",
4392                        "loc": {
4393                          "start": {
4394                            "line": 57,
4395                            "column": 56
4396                          },
4397                          "end": {
4398                            "line": 57,
4399                            "column": 62
4400                          }
4401                        }
4402                      },
4403                      "loc": {
4404                        "start": {
4405                          "line": 57,
4406                          "column": 54
4407                        },
4408                        "end": {
4409                          "line": 57,
4410                          "column": 55
4411                        }
4412                      }
4413                    }
4414                  ],
4415                  "typeParameters": {
4416                    "type": "TSTypeParameterDeclaration",
4417                    "params": [
4418                      {
4419                        "type": "TSTypeParameter",
4420                        "name": {
4421                          "type": "Identifier",
4422                          "name": "R",
4423                          "loc": {
4424                            "start": {
4425                              "line": 57,
4426                              "column": 41
4427                            },
4428                            "end": {
4429                              "line": 57,
4430                              "column": 42
4431                            }
4432                          }
4433                        },
4434                        "in": false,
4435                        "out": false,
4436                        "loc": {
4437                          "start": {
4438                            "line": 57,
4439                            "column": 41
4440                          },
4441                          "end": {
4442                            "line": 57,
4443                            "column": 43
4444                          }
4445                        }
4446                      }
4447                    ],
4448                    "loc": {
4449                      "start": {
4450                        "line": 57,
4451                        "column": 40
4452                      },
4453                      "end": {
4454                        "line": 57,
4455                        "column": 43
4456                      }
4457                    }
4458                  },
4459                  "returnType": {
4460                    "type": "TSTupleType",
4461                    "elementTypes": [
4462                      {
4463                        "type": "TSNumberKeyword",
4464                        "loc": {
4465                          "start": {
4466                            "line": 57,
4467                            "column": 68
4468                          },
4469                          "end": {
4470                            "line": 57,
4471                            "column": 74
4472                          }
4473                        }
4474                      }
4475                    ],
4476                    "loc": {
4477                      "start": {
4478                        "line": 57,
4479                        "column": 67
4480                      },
4481                      "end": {
4482                        "line": 57,
4483                        "column": 75
4484                      }
4485                    }
4486                  },
4487                  "loc": {
4488                    "start": {
4489                      "line": 57,
4490                      "column": 40
4491                    },
4492                    "end": {
4493                      "line": 57,
4494                      "column": 75
4495                    }
4496                  }
4497                }
4498              ],
4499              "loc": {
4500                "start": {
4501                  "line": 57,
4502                  "column": 39
4503                },
4504                "end": {
4505                  "line": 57,
4506                  "column": 76
4507                }
4508              }
4509            },
4510            "loc": {
4511              "start": {
4512                "line": 57,
4513                "column": 38
4514              },
4515              "end": {
4516                "line": 57,
4517                "column": 77
4518              }
4519            }
4520          },
4521          {
4522            "type": "TSClassImplements",
4523            "expression": {
4524              "type": "Identifier",
4525              "name": "A",
4526              "loc": {
4527                "start": {
4528                  "line": 57,
4529                  "column": 78
4530                },
4531                "end": {
4532                  "line": 57,
4533                  "column": 79
4534                }
4535              }
4536            },
4537            "loc": {
4538              "start": {
4539                "line": 57,
4540                "column": 78
4541              },
4542              "end": {
4543                "line": 57,
4544                "column": 81
4545              }
4546            }
4547          }
4548        ],
4549        "constructor": {
4550          "type": "MethodDefinition",
4551          "key": {
4552            "type": "Identifier",
4553            "name": "constructor",
4554            "loc": {
4555              "start": {
4556                "line": 1,
4557                "column": 1
4558              },
4559              "end": {
4560                "line": 1,
4561                "column": 1
4562              }
4563            }
4564          },
4565          "kind": "constructor",
4566          "static": false,
4567          "optional": false,
4568          "computed": false,
4569          "value": {
4570            "type": "FunctionExpression",
4571            "function": {
4572              "type": "ScriptFunction",
4573              "id": null,
4574              "generator": false,
4575              "async": false,
4576              "expression": false,
4577              "params": [
4578                {
4579                  "type": "RestElement",
4580                  "argument": {
4581                    "type": "Identifier",
4582                    "name": "args",
4583                    "loc": {
4584                      "start": {
4585                        "line": 1,
4586                        "column": 1
4587                      },
4588                      "end": {
4589                        "line": 1,
4590                        "column": 1
4591                      }
4592                    }
4593                  },
4594                  "loc": {
4595                    "start": {
4596                      "line": 1,
4597                      "column": 1
4598                    },
4599                    "end": {
4600                      "line": 1,
4601                      "column": 1
4602                    }
4603                  }
4604                }
4605              ],
4606              "body": {
4607                "type": "BlockStatement",
4608                "statements": [
4609                  {
4610                    "type": "ExpressionStatement",
4611                    "expression": {
4612                      "type": "CallExpression",
4613                      "callee": {
4614                        "type": "Super",
4615                        "loc": {
4616                          "start": {
4617                            "line": 1,
4618                            "column": 1
4619                          },
4620                          "end": {
4621                            "line": 1,
4622                            "column": 1
4623                          }
4624                        }
4625                      },
4626                      "arguments": [
4627                        {
4628                          "type": "SpreadElement",
4629                          "argument": {
4630                            "type": "Identifier",
4631                            "name": "args",
4632                            "loc": {
4633                              "start": {
4634                                "line": 1,
4635                                "column": 1
4636                              },
4637                              "end": {
4638                                "line": 1,
4639                                "column": 1
4640                              }
4641                            }
4642                          },
4643                          "loc": {
4644                            "start": {
4645                              "line": 1,
4646                              "column": 1
4647                            },
4648                            "end": {
4649                              "line": 1,
4650                              "column": 1
4651                            }
4652                          }
4653                        }
4654                      ],
4655                      "optional": false,
4656                      "loc": {
4657                        "start": {
4658                          "line": 1,
4659                          "column": 1
4660                        },
4661                        "end": {
4662                          "line": 1,
4663                          "column": 1
4664                        }
4665                      }
4666                    },
4667                    "loc": {
4668                      "start": {
4669                        "line": 1,
4670                        "column": 1
4671                      },
4672                      "end": {
4673                        "line": 1,
4674                        "column": 1
4675                      }
4676                    }
4677                  }
4678                ],
4679                "loc": {
4680                  "start": {
4681                    "line": 1,
4682                    "column": 1
4683                  },
4684                  "end": {
4685                    "line": 1,
4686                    "column": 1
4687                  }
4688                }
4689              },
4690              "loc": {
4691                "start": {
4692                  "line": 1,
4693                  "column": 1
4694                },
4695                "end": {
4696                  "line": 1,
4697                  "column": 1
4698                }
4699              }
4700            },
4701            "loc": {
4702              "start": {
4703                "line": 1,
4704                "column": 1
4705              },
4706              "end": {
4707                "line": 1,
4708                "column": 1
4709              }
4710            }
4711          },
4712          "overloads": [],
4713          "decorators": [],
4714          "loc": {
4715            "start": {
4716              "line": 57,
4717              "column": 1
4718            },
4719            "end": {
4720              "line": 59,
4721              "column": 2
4722            }
4723          }
4724        },
4725        "body": [],
4726        "indexSignatures": [],
4727        "loc": {
4728          "start": {
4729            "line": 57,
4730            "column": 80
4731          },
4732          "end": {
4733            "line": 59,
4734            "column": 2
4735          }
4736        }
4737      },
4738      "decorators": [],
4739      "loc": {
4740        "start": {
4741          "line": 57,
4742          "column": 1
4743        },
4744        "end": {
4745          "line": 59,
4746          "column": 2
4747        }
4748      }
4749    },
4750    {
4751      "type": "VariableDeclaration",
4752      "declarations": [
4753        {
4754          "type": "VariableDeclarator",
4755          "id": {
4756            "type": "Identifier",
4757            "name": "a",
4758            "typeAnnotation": {
4759              "type": "TSConstructorType",
4760              "params": [],
4761              "typeParameters": {
4762                "type": "TSTypeParameterDeclaration",
4763                "params": [
4764                  {
4765                    "type": "TSTypeParameter",
4766                    "name": {
4767                      "type": "Identifier",
4768                      "name": "A",
4769                      "loc": {
4770                        "start": {
4771                          "line": 61,
4772                          "column": 13
4773                        },
4774                        "end": {
4775                          "line": 61,
4776                          "column": 14
4777                        }
4778                      }
4779                    },
4780                    "in": false,
4781                    "out": false,
4782                    "loc": {
4783                      "start": {
4784                        "line": 61,
4785                        "column": 13
4786                      },
4787                      "end": {
4788                        "line": 61,
4789                        "column": 15
4790                      }
4791                    }
4792                  }
4793                ],
4794                "loc": {
4795                  "start": {
4796                    "line": 61,
4797                    "column": 12
4798                  },
4799                  "end": {
4800                    "line": 61,
4801                    "column": 15
4802                  }
4803                }
4804              },
4805              "returnType": {
4806                "type": "TSFunctionType",
4807                "params": [],
4808                "typeParameters": {
4809                  "type": "TSTypeParameterDeclaration",
4810                  "params": [
4811                    {
4812                      "type": "TSTypeParameter",
4813                      "name": {
4814                        "type": "Identifier",
4815                        "name": "B",
4816                        "loc": {
4817                          "start": {
4818                            "line": 61,
4819                            "column": 22
4820                          },
4821                          "end": {
4822                            "line": 61,
4823                            "column": 23
4824                          }
4825                        }
4826                      },
4827                      "in": false,
4828                      "out": false,
4829                      "loc": {
4830                        "start": {
4831                          "line": 61,
4832                          "column": 22
4833                        },
4834                        "end": {
4835                          "line": 61,
4836                          "column": 24
4837                        }
4838                      }
4839                    }
4840                  ],
4841                  "loc": {
4842                    "start": {
4843                      "line": 61,
4844                      "column": 21
4845                    },
4846                    "end": {
4847                      "line": 61,
4848                      "column": 24
4849                    }
4850                  }
4851                },
4852                "returnType": {
4853                  "type": "TSStringKeyword",
4854                  "loc": {
4855                    "start": {
4856                      "line": 61,
4857                      "column": 30
4858                    },
4859                    "end": {
4860                      "line": 61,
4861                      "column": 36
4862                    }
4863                  }
4864                },
4865                "loc": {
4866                  "start": {
4867                    "line": 61,
4868                    "column": 21
4869                  },
4870                  "end": {
4871                    "line": 61,
4872                    "column": 36
4873                  }
4874                }
4875              },
4876              "loc": {
4877                "start": {
4878                  "line": 61,
4879                  "column": 8
4880                },
4881                "end": {
4882                  "line": 61,
4883                  "column": 36
4884                }
4885              }
4886            },
4887            "loc": {
4888              "start": {
4889                "line": 61,
4890                "column": 5
4891              },
4892              "end": {
4893                "line": 61,
4894                "column": 6
4895              }
4896            }
4897          },
4898          "init": null,
4899          "loc": {
4900            "start": {
4901              "line": 61,
4902              "column": 5
4903            },
4904            "end": {
4905              "line": 61,
4906              "column": 6
4907            }
4908          }
4909        }
4910      ],
4911      "kind": "var",
4912      "loc": {
4913        "start": {
4914          "line": 61,
4915          "column": 1
4916        },
4917        "end": {
4918          "line": 61,
4919          "column": 37
4920        }
4921      }
4922    },
4923    {
4924      "type": "VariableDeclaration",
4925      "declarations": [
4926        {
4927          "type": "VariableDeclarator",
4928          "id": {
4929            "type": "Identifier",
4930            "name": "b",
4931            "typeAnnotation": {
4932              "type": "TSFunctionType",
4933              "params": [
4934                {
4935                  "type": "Identifier",
4936                  "name": "a",
4937                  "typeAnnotation": {
4938                    "type": "TSUnionType",
4939                    "types": [
4940                      {
4941                        "type": "TSNumberKeyword",
4942                        "loc": {
4943                          "start": {
4944                            "line": 62,
4945                            "column": 32
4946                          },
4947                          "end": {
4948                            "line": 62,
4949                            "column": 38
4950                          }
4951                        }
4952                      },
4953                      {
4954                        "type": "TSStringKeyword",
4955                        "loc": {
4956                          "start": {
4957                            "line": 62,
4958                            "column": 41
4959                          },
4960                          "end": {
4961                            "line": 62,
4962                            "column": 47
4963                          }
4964                        }
4965                      }
4966                    ],
4967                    "loc": {
4968                      "start": {
4969                        "line": 62,
4970                        "column": 32
4971                      },
4972                      "end": {
4973                        "line": 62,
4974                        "column": 47
4975                      }
4976                    }
4977                  },
4978                  "loc": {
4979                    "start": {
4980                      "line": 62,
4981                      "column": 29
4982                    },
4983                    "end": {
4984                      "line": 62,
4985                      "column": 30
4986                    }
4987                  }
4988                }
4989              ],
4990              "typeParameters": {
4991                "type": "TSTypeParameterDeclaration",
4992                "params": [
4993                  {
4994                    "type": "TSTypeParameter",
4995                    "name": {
4996                      "type": "Identifier",
4997                      "name": "A",
4998                      "loc": {
4999                        "start": {
5000                          "line": 62,
5001                          "column": 9
5002                        },
5003                        "end": {
5004                          "line": 62,
5005                          "column": 10
5006                        }
5007                      }
5008                    },
5009                    "constraint": {
5010                      "type": "TSTypeReference",
5011                      "typeName": {
5012                        "type": "Identifier",
5013                        "name": "T",
5014                        "loc": {
5015                          "start": {
5016                            "line": 62,
5017                            "column": 19
5018                          },
5019                          "end": {
5020                            "line": 62,
5021                            "column": 20
5022                          }
5023                        }
5024                      },
5025                      "loc": {
5026                        "start": {
5027                          "line": 62,
5028                          "column": 19
5029                        },
5030                        "end": {
5031                          "line": 62,
5032                          "column": 20
5033                        }
5034                      }
5035                    },
5036                    "in": false,
5037                    "out": false,
5038                    "loc": {
5039                      "start": {
5040                        "line": 62,
5041                        "column": 9
5042                      },
5043                      "end": {
5044                        "line": 62,
5045                        "column": 21
5046                      }
5047                    }
5048                  },
5049                  {
5050                    "type": "TSTypeParameter",
5051                    "name": {
5052                      "type": "Identifier",
5053                      "name": "U",
5054                      "loc": {
5055                        "start": {
5056                          "line": 62,
5057                          "column": 22
5058                        },
5059                        "end": {
5060                          "line": 62,
5061                          "column": 23
5062                        }
5063                      }
5064                    },
5065                    "default": {
5066                      "type": "TSLiteralType",
5067                      "literal": {
5068                        "type": "NumberLiteral",
5069                        "value": 5,
5070                        "loc": {
5071                          "start": {
5072                            "line": 62,
5073                            "column": 26
5074                          },
5075                          "end": {
5076                            "line": 62,
5077                            "column": 27
5078                          }
5079                        }
5080                      },
5081                      "loc": {
5082                        "start": {
5083                          "line": 62,
5084                          "column": 26
5085                        },
5086                        "end": {
5087                          "line": 62,
5088                          "column": 27
5089                        }
5090                      }
5091                    },
5092                    "in": false,
5093                    "out": false,
5094                    "loc": {
5095                      "start": {
5096                        "line": 62,
5097                        "column": 22
5098                      },
5099                      "end": {
5100                        "line": 62,
5101                        "column": 28
5102                      }
5103                    }
5104                  }
5105                ],
5106                "loc": {
5107                  "start": {
5108                    "line": 62,
5109                    "column": 8
5110                  },
5111                  "end": {
5112                    "line": 62,
5113                    "column": 28
5114                  }
5115                }
5116              },
5117              "returnType": {
5118                "type": "TSTypeLiteral",
5119                "members": [
5120                  {
5121                    "type": "TSPropertySignature",
5122                    "computed": false,
5123                    "optional": false,
5124                    "readonly": false,
5125                    "key": {
5126                      "type": "Identifier",
5127                      "name": "a",
5128                      "loc": {
5129                        "start": {
5130                          "line": 62,
5131                          "column": 54
5132                        },
5133                        "end": {
5134                          "line": 62,
5135                          "column": 55
5136                        }
5137                      }
5138                    },
5139                    "typeAnnotation": {
5140                      "type": "TSNumberKeyword",
5141                      "loc": {
5142                        "start": {
5143                          "line": 62,
5144                          "column": 57
5145                        },
5146                        "end": {
5147                          "line": 62,
5148                          "column": 63
5149                        }
5150                      }
5151                    },
5152                    "loc": {
5153                      "start": {
5154                        "line": 62,
5155                        "column": 54
5156                      },
5157                      "end": {
5158                        "line": 62,
5159                        "column": 65
5160                      }
5161                    }
5162                  }
5163                ],
5164                "loc": {
5165                  "start": {
5166                    "line": 62,
5167                    "column": 52
5168                  },
5169                  "end": {
5170                    "line": 62,
5171                    "column": 65
5172                  }
5173                }
5174              },
5175              "loc": {
5176                "start": {
5177                  "line": 62,
5178                  "column": 8
5179                },
5180                "end": {
5181                  "line": 62,
5182                  "column": 65
5183                }
5184              }
5185            },
5186            "loc": {
5187              "start": {
5188                "line": 62,
5189                "column": 5
5190              },
5191              "end": {
5192                "line": 62,
5193                "column": 6
5194              }
5195            }
5196          },
5197          "init": null,
5198          "loc": {
5199            "start": {
5200              "line": 62,
5201              "column": 5
5202            },
5203            "end": {
5204              "line": 62,
5205              "column": 6
5206            }
5207          }
5208        }
5209      ],
5210      "kind": "var",
5211      "loc": {
5212        "start": {
5213          "line": 62,
5214          "column": 1
5215        },
5216        "end": {
5217          "line": 62,
5218          "column": 66
5219        }
5220      }
5221    },
5222    {
5223      "type": "VariableDeclaration",
5224      "declarations": [
5225        {
5226          "type": "VariableDeclarator",
5227          "id": {
5228            "type": "Identifier",
5229            "name": "c",
5230            "typeAnnotation": {
5231              "type": "TSIndexedAccessType",
5232              "objectType": {
5233                "type": "TSTypeReference",
5234                "typeName": {
5235                  "type": "TSQualifiedName",
5236                  "left": {
5237                    "type": "Identifier",
5238                    "name": "B",
5239                    "loc": {
5240                      "start": {
5241                        "line": 64,
5242                        "column": 8
5243                      },
5244                      "end": {
5245                        "line": 64,
5246                        "column": 9
5247                      }
5248                    }
5249                  },
5250                  "right": {
5251                    "type": "Identifier",
5252                    "name": "T",
5253                    "loc": {
5254                      "start": {
5255                        "line": 64,
5256                        "column": 10
5257                      },
5258                      "end": {
5259                        "line": 64,
5260                        "column": 11
5261                      }
5262                    }
5263                  },
5264                  "loc": {
5265                    "start": {
5266                      "line": 64,
5267                      "column": 8
5268                    },
5269                    "end": {
5270                      "line": 64,
5271                      "column": 12
5272                    }
5273                  }
5274                },
5275                "typeParameters": {
5276                  "type": "TSTypeParameterInstantiation",
5277                  "params": [
5278                    {
5279                      "type": "TSTypeReference",
5280                      "typeName": {
5281                        "type": "Identifier",
5282                        "name": "A",
5283                        "loc": {
5284                          "start": {
5285                            "line": 64,
5286                            "column": 12
5287                          },
5288                          "end": {
5289                            "line": 64,
5290                            "column": 13
5291                          }
5292                        }
5293                      },
5294                      "typeParameters": {
5295                        "type": "TSTypeParameterInstantiation",
5296                        "params": [
5297                          {
5298                            "type": "TSTypeReference",
5299                            "typeName": {
5300                              "type": "Identifier",
5301                              "name": "C",
5302                              "loc": {
5303                                "start": {
5304                                  "line": 64,
5305                                  "column": 14
5306                                },
5307                                "end": {
5308                                  "line": 64,
5309                                  "column": 15
5310                                }
5311                              }
5312                            },
5313                            "typeParameters": {
5314                              "type": "TSTypeParameterInstantiation",
5315                              "params": [
5316                                {
5317                                  "type": "TSNumberKeyword",
5318                                  "loc": {
5319                                    "start": {
5320                                      "line": 64,
5321                                      "column": 16
5322                                    },
5323                                    "end": {
5324                                      "line": 64,
5325                                      "column": 22
5326                                    }
5327                                  }
5328                                }
5329                              ],
5330                              "loc": {
5331                                "start": {
5332                                  "line": 64,
5333                                  "column": 15
5334                                },
5335                                "end": {
5336                                  "line": 64,
5337                                  "column": 25
5338                                }
5339                              }
5340                            },
5341                            "loc": {
5342                              "start": {
5343                                "line": 64,
5344                                "column": 14
5345                              },
5346                              "end": {
5347                                "line": 64,
5348                                "column": 15
5349                              }
5350                            }
5351                          }
5352                        ],
5353                        "loc": {
5354                          "start": {
5355                            "line": 64,
5356                            "column": 13
5357                          },
5358                          "end": {
5359                            "line": 64,
5360                            "column": 25
5361                          }
5362                        }
5363                      },
5364                      "loc": {
5365                        "start": {
5366                          "line": 64,
5367                          "column": 12
5368                        },
5369                        "end": {
5370                          "line": 64,
5371                          "column": 13
5372                        }
5373                      }
5374                    }
5375                  ],
5376                  "loc": {
5377                    "start": {
5378                      "line": 64,
5379                      "column": 11
5380                    },
5381                    "end": {
5382                      "line": 64,
5383                      "column": 25
5384                    }
5385                  }
5386                },
5387                "loc": {
5388                  "start": {
5389                    "line": 64,
5390                    "column": 8
5391                  },
5392                  "end": {
5393                    "line": 64,
5394                    "column": 26
5395                  }
5396                }
5397              },
5398              "indexType": {
5399                "type": "TSLiteralType",
5400                "literal": {
5401                  "type": "NumberLiteral",
5402                  "value": 0,
5403                  "loc": {
5404                    "start": {
5405                      "line": 64,
5406                      "column": 26
5407                    },
5408                    "end": {
5409                      "line": 64,
5410                      "column": 27
5411                    }
5412                  }
5413                },
5414                "loc": {
5415                  "start": {
5416                    "line": 64,
5417                    "column": 26
5418                  },
5419                  "end": {
5420                    "line": 64,
5421                    "column": 27
5422                  }
5423                }
5424              },
5425              "loc": {
5426                "start": {
5427                  "line": 64,
5428                  "column": 8
5429                },
5430                "end": {
5431                  "line": 64,
5432                  "column": 29
5433                }
5434              }
5435            },
5436            "loc": {
5437              "start": {
5438                "line": 64,
5439                "column": 5
5440              },
5441              "end": {
5442                "line": 64,
5443                "column": 6
5444              }
5445            }
5446          },
5447          "init": null,
5448          "loc": {
5449            "start": {
5450              "line": 64,
5451              "column": 5
5452            },
5453            "end": {
5454              "line": 64,
5455              "column": 6
5456            }
5457          }
5458        }
5459      ],
5460      "kind": "var",
5461      "loc": {
5462        "start": {
5463          "line": 64,
5464          "column": 1
5465        },
5466        "end": {
5467          "line": 64,
5468          "column": 29
5469        }
5470      }
5471    },
5472    {
5473      "type": "VariableDeclaration",
5474      "declarations": [
5475        {
5476          "type": "VariableDeclarator",
5477          "id": {
5478            "type": "Identifier",
5479            "name": "d",
5480            "typeAnnotation": {
5481              "type": "TSTypeReference",
5482              "typeName": {
5483                "type": "Identifier",
5484                "name": "A",
5485                "loc": {
5486                  "start": {
5487                    "line": 65,
5488                    "column": 8
5489                  },
5490                  "end": {
5491                    "line": 65,
5492                    "column": 9
5493                  }
5494                }
5495              },
5496              "typeParameters": {
5497                "type": "TSTypeParameterInstantiation",
5498                "params": [
5499                  {
5500                    "type": "TSNumberKeyword",
5501                    "loc": {
5502                      "start": {
5503                        "line": 65,
5504                        "column": 10
5505                      },
5506                      "end": {
5507                        "line": 65,
5508                        "column": 16
5509                      }
5510                    }
5511                  },
5512                  {
5513                    "type": "TSTypeLiteral",
5514                    "members": [
5515                      {
5516                        "type": "TSPropertySignature",
5517                        "computed": false,
5518                        "optional": false,
5519                        "readonly": false,
5520                        "key": {
5521                          "type": "Identifier",
5522                          "name": "a",
5523                          "loc": {
5524                            "start": {
5525                              "line": 65,
5526                              "column": 20
5527                            },
5528                            "end": {
5529                              "line": 65,
5530                              "column": 21
5531                            }
5532                          }
5533                        },
5534                        "typeAnnotation": {
5535                          "type": "TSNumberKeyword",
5536                          "loc": {
5537                            "start": {
5538                              "line": 65,
5539                              "column": 23
5540                            },
5541                            "end": {
5542                              "line": 65,
5543                              "column": 29
5544                            }
5545                          }
5546                        },
5547                        "loc": {
5548                          "start": {
5549                            "line": 65,
5550                            "column": 20
5551                          },
5552                          "end": {
5553                            "line": 65,
5554                            "column": 30
5555                          }
5556                        }
5557                      },
5558                      {
5559                        "type": "TSPropertySignature",
5560                        "computed": false,
5561                        "optional": false,
5562                        "readonly": false,
5563                        "key": {
5564                          "type": "Identifier",
5565                          "name": "b",
5566                          "loc": {
5567                            "start": {
5568                              "line": 65,
5569                              "column": 31
5570                            },
5571                            "end": {
5572                              "line": 65,
5573                              "column": 32
5574                            }
5575                          }
5576                        },
5577                        "typeAnnotation": {
5578                          "type": "TSStringKeyword",
5579                          "loc": {
5580                            "start": {
5581                              "line": 65,
5582                              "column": 34
5583                            },
5584                            "end": {
5585                              "line": 65,
5586                              "column": 40
5587                            }
5588                          }
5589                        },
5590                        "loc": {
5591                          "start": {
5592                            "line": 65,
5593                            "column": 31
5594                          },
5595                          "end": {
5596                            "line": 65,
5597                            "column": 42
5598                          }
5599                        }
5600                      }
5601                    ],
5602                    "loc": {
5603                      "start": {
5604                        "line": 65,
5605                        "column": 18
5606                      },
5607                      "end": {
5608                        "line": 65,
5609                        "column": 42
5610                      }
5611                    }
5612                  },
5613                  {
5614                    "type": "TSTupleType",
5615                    "elementTypes": [
5616                      {
5617                        "type": "TSNumberKeyword",
5618                        "loc": {
5619                          "start": {
5620                            "line": 65,
5621                            "column": 45
5622                          },
5623                          "end": {
5624                            "line": 65,
5625                            "column": 51
5626                          }
5627                        }
5628                      },
5629                      {
5630                        "type": "TSStringKeyword",
5631                        "loc": {
5632                          "start": {
5633                            "line": 65,
5634                            "column": 53
5635                          },
5636                          "end": {
5637                            "line": 65,
5638                            "column": 59
5639                          }
5640                        }
5641                      }
5642                    ],
5643                    "loc": {
5644                      "start": {
5645                        "line": 65,
5646                        "column": 44
5647                      },
5648                      "end": {
5649                        "line": 65,
5650                        "column": 60
5651                      }
5652                    }
5653                  }
5654                ],
5655                "loc": {
5656                  "start": {
5657                    "line": 65,
5658                    "column": 9
5659                  },
5660                  "end": {
5661                    "line": 65,
5662                    "column": 61
5663                  }
5664                }
5665              },
5666              "loc": {
5667                "start": {
5668                  "line": 65,
5669                  "column": 8
5670                },
5671                "end": {
5672                  "line": 65,
5673                  "column": 9
5674                }
5675              }
5676            },
5677            "loc": {
5678              "start": {
5679                "line": 65,
5680                "column": 5
5681              },
5682              "end": {
5683                "line": 65,
5684                "column": 6
5685              }
5686            }
5687          },
5688          "init": null,
5689          "loc": {
5690            "start": {
5691              "line": 65,
5692              "column": 5
5693            },
5694            "end": {
5695              "line": 65,
5696              "column": 6
5697            }
5698          }
5699        }
5700      ],
5701      "kind": "var",
5702      "loc": {
5703        "start": {
5704          "line": 65,
5705          "column": 1
5706        },
5707        "end": {
5708          "line": 65,
5709          "column": 62
5710        }
5711      }
5712    },
5713    {
5714      "type": "VariableDeclaration",
5715      "declarations": [
5716        {
5717          "type": "VariableDeclarator",
5718          "id": {
5719            "type": "Identifier",
5720            "name": "e",
5721            "typeAnnotation": {
5722              "type": "TSTypeReference",
5723              "typeName": {
5724                "type": "Identifier",
5725                "name": "T",
5726                "loc": {
5727                  "start": {
5728                    "line": 66,
5729                    "column": 8
5730                  },
5731                  "end": {
5732                    "line": 66,
5733                    "column": 9
5734                  }
5735                }
5736              },
5737              "typeParameters": {
5738                "type": "TSTypeParameterInstantiation",
5739                "params": [
5740                  {
5741                    "type": "TSFunctionType",
5742                    "params": [],
5743                    "typeParameters": {
5744                      "type": "TSTypeParameterDeclaration",
5745                      "params": [
5746                        {
5747                          "type": "TSTypeParameter",
5748                          "name": {
5749                            "type": "Identifier",
5750                            "name": "A",
5751                            "loc": {
5752                              "start": {
5753                                "line": 66,
5754                                "column": 11
5755                              },
5756                              "end": {
5757                                "line": 66,
5758                                "column": 12
5759                              }
5760                            }
5761                          },
5762                          "in": false,
5763                          "out": false,
5764                          "loc": {
5765                            "start": {
5766                              "line": 66,
5767                              "column": 11
5768                            },
5769                            "end": {
5770                              "line": 66,
5771                              "column": 13
5772                            }
5773                          }
5774                        }
5775                      ],
5776                      "loc": {
5777                        "start": {
5778                          "line": 66,
5779                          "column": 10
5780                        },
5781                        "end": {
5782                          "line": 66,
5783                          "column": 13
5784                        }
5785                      }
5786                    },
5787                    "returnType": {
5788                      "type": "TSTypeLiteral",
5789                      "members": [],
5790                      "loc": {
5791                        "start": {
5792                          "line": 66,
5793                          "column": 19
5794                        },
5795                        "end": {
5796                          "line": 66,
5797                          "column": 21
5798                        }
5799                      }
5800                    },
5801                    "loc": {
5802                      "start": {
5803                        "line": 66,
5804                        "column": 10
5805                      },
5806                      "end": {
5807                        "line": 66,
5808                        "column": 21
5809                      }
5810                    }
5811                  }
5812                ],
5813                "loc": {
5814                  "start": {
5815                    "line": 66,
5816                    "column": 9
5817                  },
5818                  "end": {
5819                    "line": 66,
5820                    "column": 22
5821                  }
5822                }
5823              },
5824              "loc": {
5825                "start": {
5826                  "line": 66,
5827                  "column": 8
5828                },
5829                "end": {
5830                  "line": 66,
5831                  "column": 9
5832                }
5833              }
5834            },
5835            "loc": {
5836              "start": {
5837                "line": 66,
5838                "column": 5
5839              },
5840              "end": {
5841                "line": 66,
5842                "column": 6
5843              }
5844            }
5845          },
5846          "init": null,
5847          "loc": {
5848            "start": {
5849              "line": 66,
5850              "column": 5
5851            },
5852            "end": {
5853              "line": 66,
5854              "column": 6
5855            }
5856          }
5857        }
5858      ],
5859      "kind": "var",
5860      "loc": {
5861        "start": {
5862          "line": 66,
5863          "column": 1
5864        },
5865        "end": {
5866          "line": 66,
5867          "column": 23
5868        }
5869      }
5870    },
5871    {
5872      "type": "TSTypeAliasDeclaration",
5873      "id": {
5874        "type": "Identifier",
5875        "name": "E",
5876        "loc": {
5877          "start": {
5878            "line": 68,
5879            "column": 6
5880          },
5881          "end": {
5882            "line": 68,
5883            "column": 7
5884          }
5885        }
5886      },
5887      "typeAnnotation": {
5888        "type": "TSUnionType",
5889        "types": [
5890          {
5891            "type": "TSNumberKeyword",
5892            "loc": {
5893              "start": {
5894                "line": 68,
5895                "column": 38
5896              },
5897              "end": {
5898                "line": 68,
5899                "column": 44
5900              }
5901            }
5902          },
5903          {
5904            "type": "TSTypeReference",
5905            "typeName": {
5906              "type": "Identifier",
5907              "name": "T",
5908              "loc": {
5909                "start": {
5910                  "line": 68,
5911                  "column": 47
5912                },
5913                "end": {
5914                  "line": 68,
5915                  "column": 48
5916                }
5917              }
5918            },
5919            "loc": {
5920              "start": {
5921                "line": 68,
5922                "column": 47
5923              },
5924              "end": {
5925                "line": 68,
5926                "column": 48
5927              }
5928            }
5929          },
5930          {
5931            "type": "TSStringKeyword",
5932            "loc": {
5933              "start": {
5934                "line": 68,
5935                "column": 51
5936              },
5937              "end": {
5938                "line": 68,
5939                "column": 57
5940              }
5941            }
5942          }
5943        ],
5944        "loc": {
5945          "start": {
5946            "line": 68,
5947            "column": 38
5948          },
5949          "end": {
5950            "line": 68,
5951            "column": 57
5952          }
5953        }
5954      },
5955      "typeParameters": {
5956        "type": "TSTypeParameterDeclaration",
5957        "params": [
5958          {
5959            "type": "TSTypeParameter",
5960            "name": {
5961              "type": "Identifier",
5962              "name": "R",
5963              "loc": {
5964                "start": {
5965                  "line": 68,
5966                  "column": 8
5967                },
5968                "end": {
5969                  "line": 68,
5970                  "column": 9
5971                }
5972              }
5973            },
5974            "constraint": {
5975              "type": "TSTypeReference",
5976              "typeName": {
5977                "type": "Identifier",
5978                "name": "B",
5979                "loc": {
5980                  "start": {
5981                    "line": 68,
5982                    "column": 18
5983                  },
5984                  "end": {
5985                    "line": 68,
5986                    "column": 19
5987                  }
5988                }
5989              },
5990              "loc": {
5991                "start": {
5992                  "line": 68,
5993                  "column": 18
5994                },
5995                "end": {
5996                  "line": 68,
5997                  "column": 19
5998                }
5999              }
6000            },
6001            "in": false,
6002            "out": false,
6003            "loc": {
6004              "start": {
6005                "line": 68,
6006                "column": 8
6007              },
6008              "end": {
6009                "line": 68,
6010                "column": 20
6011              }
6012            }
6013          },
6014          {
6015            "type": "TSTypeParameter",
6016            "name": {
6017              "type": "Identifier",
6018              "name": "C",
6019              "loc": {
6020                "start": {
6021                  "line": 68,
6022                  "column": 21
6023                },
6024                "end": {
6025                  "line": 68,
6026                  "column": 22
6027                }
6028              }
6029            },
6030            "in": false,
6031            "out": false,
6032            "loc": {
6033              "start": {
6034                "line": 68,
6035                "column": 21
6036              },
6037              "end": {
6038                "line": 68,
6039                "column": 23
6040              }
6041            }
6042          },
6043          {
6044            "type": "TSTypeParameter",
6045            "name": {
6046              "type": "Identifier",
6047              "name": "T",
6048              "loc": {
6049                "start": {
6050                  "line": 68,
6051                  "column": 24
6052                },
6053                "end": {
6054                  "line": 68,
6055                  "column": 25
6056                }
6057              }
6058            },
6059            "default": {
6060              "type": "TSNumberKeyword",
6061              "loc": {
6062                "start": {
6063                  "line": 68,
6064                  "column": 28
6065                },
6066                "end": {
6067                  "line": 68,
6068                  "column": 34
6069                }
6070              }
6071            },
6072            "in": false,
6073            "out": false,
6074            "loc": {
6075              "start": {
6076                "line": 68,
6077                "column": 24
6078              },
6079              "end": {
6080                "line": 68,
6081                "column": 35
6082              }
6083            }
6084          }
6085        ],
6086        "loc": {
6087          "start": {
6088            "line": 68,
6089            "column": 7
6090          },
6091          "end": {
6092            "line": 68,
6093            "column": 35
6094          }
6095        }
6096      },
6097      "loc": {
6098        "start": {
6099          "line": 68,
6100          "column": 1
6101        },
6102        "end": {
6103          "line": 68,
6104          "column": 58
6105        }
6106      }
6107    },
6108    {
6109      "type": "TSTypeAliasDeclaration",
6110      "id": {
6111        "type": "Identifier",
6112        "name": "P",
6113        "loc": {
6114          "start": {
6115            "line": 69,
6116            "column": 6
6117          },
6118          "end": {
6119            "line": 69,
6120            "column": 7
6121          }
6122        }
6123      },
6124      "typeAnnotation": {
6125        "type": "TSTypeLiteral",
6126        "members": [
6127          {
6128            "type": "TSPropertySignature",
6129            "computed": false,
6130            "optional": false,
6131            "readonly": false,
6132            "key": {
6133              "type": "Identifier",
6134              "name": "a",
6135              "loc": {
6136                "start": {
6137                  "line": 69,
6138                  "column": 52
6139                },
6140                "end": {
6141                  "line": 69,
6142                  "column": 53
6143                }
6144              }
6145            },
6146            "typeAnnotation": {
6147              "type": "TSTypeReference",
6148              "typeName": {
6149                "type": "Identifier",
6150                "name": "K",
6151                "loc": {
6152                  "start": {
6153                    "line": 69,
6154                    "column": 54
6155                  },
6156                  "end": {
6157                    "line": 69,
6158                    "column": 55
6159                  }
6160                }
6161              },
6162              "loc": {
6163                "start": {
6164                  "line": 69,
6165                  "column": 54
6166                },
6167                "end": {
6168                  "line": 69,
6169                  "column": 55
6170                }
6171              }
6172            },
6173            "loc": {
6174              "start": {
6175                "line": 69,
6176                "column": 52
6177              },
6178              "end": {
6179                "line": 69,
6180                "column": 56
6181              }
6182            }
6183          },
6184          {
6185            "type": "TSPropertySignature",
6186            "computed": false,
6187            "optional": false,
6188            "readonly": false,
6189            "key": {
6190              "type": "Identifier",
6191              "name": "b",
6192              "loc": {
6193                "start": {
6194                  "line": 69,
6195                  "column": 57
6196                },
6197                "end": {
6198                  "line": 69,
6199                  "column": 58
6200                }
6201              }
6202            },
6203            "typeAnnotation": {
6204              "type": "TSTypeReference",
6205              "typeName": {
6206                "type": "Identifier",
6207                "name": "Q",
6208                "loc": {
6209                  "start": {
6210                    "line": 69,
6211                    "column": 59
6212                  },
6213                  "end": {
6214                    "line": 69,
6215                    "column": 60
6216                  }
6217                }
6218              },
6219              "loc": {
6220                "start": {
6221                  "line": 69,
6222                  "column": 59
6223                },
6224                "end": {
6225                  "line": 69,
6226                  "column": 60
6227                }
6228              }
6229            },
6230            "loc": {
6231              "start": {
6232                "line": 69,
6233                "column": 57
6234              },
6235              "end": {
6236                "line": 69,
6237                "column": 61
6238              }
6239            }
6240          }
6241        ],
6242        "loc": {
6243          "start": {
6244            "line": 69,
6245            "column": 51
6246          },
6247          "end": {
6248            "line": 69,
6249            "column": 61
6250          }
6251        }
6252      },
6253      "typeParameters": {
6254        "type": "TSTypeParameterDeclaration",
6255        "params": [
6256          {
6257            "type": "TSTypeParameter",
6258            "name": {
6259              "type": "Identifier",
6260              "name": "K",
6261              "loc": {
6262                "start": {
6263                  "line": 69,
6264                  "column": 8
6265                },
6266                "end": {
6267                  "line": 69,
6268                  "column": 9
6269                }
6270              }
6271            },
6272            "in": false,
6273            "out": false,
6274            "loc": {
6275              "start": {
6276                "line": 69,
6277                "column": 8
6278              },
6279              "end": {
6280                "line": 69,
6281                "column": 10
6282              }
6283            }
6284          },
6285          {
6286            "type": "TSTypeParameter",
6287            "name": {
6288              "type": "Identifier",
6289              "name": "Q",
6290              "loc": {
6291                "start": {
6292                  "line": 69,
6293                  "column": 11
6294                },
6295                "end": {
6296                  "line": 69,
6297                  "column": 12
6298                }
6299              }
6300            },
6301            "default": {
6302              "type": "TSUnionType",
6303              "types": [
6304                {
6305                  "type": "TSTupleType",
6306                  "elementTypes": [
6307                    {
6308                      "type": "TSNumberKeyword",
6309                      "loc": {
6310                        "start": {
6311                          "line": 69,
6312                          "column": 16
6313                        },
6314                        "end": {
6315                          "line": 69,
6316                          "column": 22
6317                        }
6318                      }
6319                    },
6320                    {
6321                      "type": "TSNumberKeyword",
6322                      "loc": {
6323                        "start": {
6324                          "line": 69,
6325                          "column": 24
6326                        },
6327                        "end": {
6328                          "line": 69,
6329                          "column": 30
6330                        }
6331                      }
6332                    },
6333                    {
6334                      "type": "TSStringKeyword",
6335                      "loc": {
6336                        "start": {
6337                          "line": 69,
6338                          "column": 32
6339                        },
6340                        "end": {
6341                          "line": 69,
6342                          "column": 38
6343                        }
6344                      }
6345                    }
6346                  ],
6347                  "loc": {
6348                    "start": {
6349                      "line": 69,
6350                      "column": 15
6351                    },
6352                    "end": {
6353                      "line": 69,
6354                      "column": 39
6355                    }
6356                  }
6357                },
6358                {
6359                  "type": "TSArrayType",
6360                  "elementType": {
6361                    "type": "TSAnyKeyword",
6362                    "loc": {
6363                      "start": {
6364                        "line": 69,
6365                        "column": 42
6366                      },
6367                      "end": {
6368                        "line": 69,
6369                        "column": 45
6370                      }
6371                    }
6372                  },
6373                  "loc": {
6374                    "start": {
6375                      "line": 69,
6376                      "column": 42
6377                    },
6378                    "end": {
6379                      "line": 69,
6380                      "column": 47
6381                    }
6382                  }
6383                }
6384              ],
6385              "loc": {
6386                "start": {
6387                  "line": 69,
6388                  "column": 15
6389                },
6390                "end": {
6391                  "line": 69,
6392                  "column": 47
6393                }
6394              }
6395            },
6396            "in": false,
6397            "out": false,
6398            "loc": {
6399              "start": {
6400                "line": 69,
6401                "column": 11
6402              },
6403              "end": {
6404                "line": 69,
6405                "column": 48
6406              }
6407            }
6408          }
6409        ],
6410        "loc": {
6411          "start": {
6412            "line": 69,
6413            "column": 7
6414          },
6415          "end": {
6416            "line": 69,
6417            "column": 48
6418          }
6419        }
6420      },
6421      "loc": {
6422        "start": {
6423          "line": 69,
6424          "column": 1
6425        },
6426        "end": {
6427          "line": 69,
6428          "column": 62
6429        }
6430      }
6431    },
6432    {
6433      "type": "ExpressionStatement",
6434      "expression": {
6435        "type": "CallExpression",
6436        "callee": {
6437          "type": "Identifier",
6438          "name": "async",
6439          "loc": {
6440            "start": {
6441              "line": 71,
6442              "column": 1
6443            },
6444            "end": {
6445              "line": 71,
6446              "column": 6
6447            }
6448          }
6449        },
6450        "arguments": [],
6451        "optional": false,
6452        "typeParameters": {
6453          "type": "TSTypeParameterInstantiation",
6454          "params": [
6455            {
6456              "type": "TSFunctionType",
6457              "params": [],
6458              "typeParameters": {
6459                "type": "TSTypeParameterDeclaration",
6460                "params": [
6461                  {
6462                    "type": "TSTypeParameter",
6463                    "name": {
6464                      "type": "Identifier",
6465                      "name": "A",
6466                      "loc": {
6467                        "start": {
6468                          "line": 71,
6469                          "column": 8
6470                        },
6471                        "end": {
6472                          "line": 71,
6473                          "column": 9
6474                        }
6475                      }
6476                    },
6477                    "in": false,
6478                    "out": false,
6479                    "loc": {
6480                      "start": {
6481                        "line": 71,
6482                        "column": 8
6483                      },
6484                      "end": {
6485                        "line": 71,
6486                        "column": 10
6487                      }
6488                    }
6489                  }
6490                ],
6491                "loc": {
6492                  "start": {
6493                    "line": 71,
6494                    "column": 7
6495                  },
6496                  "end": {
6497                    "line": 71,
6498                    "column": 10
6499                  }
6500                }
6501              },
6502              "returnType": {
6503                "type": "TSTypeLiteral",
6504                "members": [],
6505                "loc": {
6506                  "start": {
6507                    "line": 71,
6508                    "column": 16
6509                  },
6510                  "end": {
6511                    "line": 71,
6512                    "column": 18
6513                  }
6514                }
6515              },
6516              "loc": {
6517                "start": {
6518                  "line": 71,
6519                  "column": 7
6520                },
6521                "end": {
6522                  "line": 71,
6523                  "column": 18
6524                }
6525              }
6526            }
6527          ],
6528          "loc": {
6529            "start": {
6530              "line": 71,
6531              "column": 6
6532            },
6533            "end": {
6534              "line": 71,
6535              "column": 19
6536            }
6537          }
6538        },
6539        "loc": {
6540          "start": {
6541            "line": 71,
6542            "column": 1
6543          },
6544          "end": {
6545            "line": 71,
6546            "column": 21
6547          }
6548        }
6549      },
6550      "loc": {
6551        "start": {
6552          "line": 71,
6553          "column": 1
6554        },
6555        "end": {
6556          "line": 71,
6557          "column": 22
6558        }
6559      }
6560    },
6561    {
6562      "type": "ExpressionStatement",
6563      "expression": {
6564        "type": "CallExpression",
6565        "callee": {
6566          "type": "Identifier",
6567          "name": "async",
6568          "loc": {
6569            "start": {
6570              "line": 72,
6571              "column": 1
6572            },
6573            "end": {
6574              "line": 72,
6575              "column": 6
6576            }
6577          }
6578        },
6579        "arguments": [],
6580        "optional": false,
6581        "typeParameters": {
6582          "type": "TSTypeParameterInstantiation",
6583          "params": [
6584            {
6585              "type": "TSNumberKeyword",
6586              "loc": {
6587                "start": {
6588                  "line": 72,
6589                  "column": 7
6590                },
6591                "end": {
6592                  "line": 72,
6593                  "column": 13
6594                }
6595              }
6596            }
6597          ],
6598          "loc": {
6599            "start": {
6600              "line": 72,
6601              "column": 6
6602            },
6603            "end": {
6604              "line": 72,
6605              "column": 14
6606            }
6607          }
6608        },
6609        "loc": {
6610          "start": {
6611            "line": 72,
6612            "column": 1
6613          },
6614          "end": {
6615            "line": 72,
6616            "column": 16
6617          }
6618        }
6619      },
6620      "loc": {
6621        "start": {
6622          "line": 72,
6623          "column": 1
6624        },
6625        "end": {
6626          "line": 72,
6627          "column": 17
6628        }
6629      }
6630    },
6631    {
6632      "type": "ExpressionStatement",
6633      "expression": {
6634        "type": "ArrowFunctionExpression",
6635        "function": {
6636          "type": "ScriptFunction",
6637          "id": null,
6638          "generator": false,
6639          "async": false,
6640          "expression": true,
6641          "params": [],
6642          "returnType": {
6643            "type": "TSNumberKeyword",
6644            "loc": {
6645              "start": {
6646                "line": 73,
6647                "column": 17
6648              },
6649              "end": {
6650                "line": 73,
6651                "column": 23
6652              }
6653            }
6654          },
6655          "typeParameters": {
6656            "type": "TSTypeParameterDeclaration",
6657            "params": [
6658              {
6659                "type": "TSTypeParameter",
6660                "name": {
6661                  "type": "Identifier",
6662                  "name": "A",
6663                  "loc": {
6664                    "start": {
6665                      "line": 73,
6666                      "column": 2
6667                    },
6668                    "end": {
6669                      "line": 73,
6670                      "column": 3
6671                    }
6672                  }
6673                },
6674                "constraint": {
6675                  "type": "TSTypeReference",
6676                  "typeName": {
6677                    "type": "Identifier",
6678                    "name": "B",
6679                    "loc": {
6680                      "start": {
6681                        "line": 73,
6682                        "column": 12
6683                      },
6684                      "end": {
6685                        "line": 73,
6686                        "column": 13
6687                      }
6688                    }
6689                  },
6690                  "loc": {
6691                    "start": {
6692                      "line": 73,
6693                      "column": 12
6694                    },
6695                    "end": {
6696                      "line": 73,
6697                      "column": 13
6698                    }
6699                  }
6700                },
6701                "in": false,
6702                "out": false,
6703                "loc": {
6704                  "start": {
6705                    "line": 73,
6706                    "column": 2
6707                  },
6708                  "end": {
6709                    "line": 73,
6710                    "column": 14
6711                  }
6712                }
6713              }
6714            ],
6715            "loc": {
6716              "start": {
6717                "line": 73,
6718                "column": 1
6719              },
6720              "end": {
6721                "line": 73,
6722                "column": 14
6723              }
6724            }
6725          },
6726          "body": {
6727            "type": "BooleanLiteral",
6728            "value": true,
6729            "loc": {
6730              "start": {
6731                "line": 73,
6732                "column": 27
6733              },
6734              "end": {
6735                "line": 73,
6736                "column": 31
6737              }
6738            }
6739          },
6740          "loc": {
6741            "start": {
6742              "line": 73,
6743              "column": 1
6744            },
6745            "end": {
6746              "line": 73,
6747              "column": 31
6748            }
6749          }
6750        },
6751        "loc": {
6752          "start": {
6753            "line": 73,
6754            "column": 1
6755          },
6756          "end": {
6757            "line": 73,
6758            "column": 31
6759          }
6760        }
6761      },
6762      "loc": {
6763        "start": {
6764          "line": 73,
6765          "column": 1
6766        },
6767        "end": {
6768          "line": 73,
6769          "column": 32
6770        }
6771      }
6772    },
6773    {
6774      "type": "ExpressionStatement",
6775      "expression": {
6776        "type": "ArrowFunctionExpression",
6777        "function": {
6778          "type": "ScriptFunction",
6779          "id": null,
6780          "generator": false,
6781          "async": true,
6782          "expression": false,
6783          "params": [],
6784          "typeParameters": {
6785            "type": "TSTypeParameterDeclaration",
6786            "params": [
6787              {
6788                "type": "TSTypeParameter",
6789                "name": {
6790                  "type": "Identifier",
6791                  "name": "A",
6792                  "loc": {
6793                    "start": {
6794                      "line": 74,
6795                      "column": 7
6796                    },
6797                    "end": {
6798                      "line": 74,
6799                      "column": 8
6800                    }
6801                  }
6802                },
6803                "constraint": {
6804                  "type": "TSTypeOperator",
6805                  "operator": "readonly",
6806                  "typeAnnotation": {
6807                    "type": "TSTupleType",
6808                    "elementTypes": [
6809                      {
6810                        "type": "TSNumberKeyword",
6811                        "loc": {
6812                          "start": {
6813                            "line": 74,
6814                            "column": 27
6815                          },
6816                          "end": {
6817                            "line": 74,
6818                            "column": 33
6819                          }
6820                        }
6821                      },
6822                      {
6823                        "type": "TSStringKeyword",
6824                        "loc": {
6825                          "start": {
6826                            "line": 74,
6827                            "column": 35
6828                          },
6829                          "end": {
6830                            "line": 74,
6831                            "column": 41
6832                          }
6833                        }
6834                      }
6835                    ],
6836                    "loc": {
6837                      "start": {
6838                        "line": 74,
6839                        "column": 26
6840                      },
6841                      "end": {
6842                        "line": 74,
6843                        "column": 42
6844                      }
6845                    }
6846                  },
6847                  "loc": {
6848                    "start": {
6849                      "line": 74,
6850                      "column": 17
6851                    },
6852                    "end": {
6853                      "line": 74,
6854                      "column": 42
6855                    }
6856                  }
6857                },
6858                "in": false,
6859                "out": false,
6860                "loc": {
6861                  "start": {
6862                    "line": 74,
6863                    "column": 7
6864                  },
6865                  "end": {
6866                    "line": 74,
6867                    "column": 43
6868                  }
6869                }
6870              }
6871            ],
6872            "loc": {
6873              "start": {
6874                "line": 74,
6875                "column": 6
6876              },
6877              "end": {
6878                "line": 74,
6879                "column": 43
6880              }
6881            }
6882          },
6883          "body": {
6884            "type": "BlockStatement",
6885            "statements": [
6886              {
6887                "type": "ReturnStatement",
6888                "argument": {
6889                  "type": "StringLiteral",
6890                  "value": "foo",
6891                  "loc": {
6892                    "start": {
6893                      "line": 74,
6894                      "column": 57
6895                    },
6896                    "end": {
6897                      "line": 74,
6898                      "column": 62
6899                    }
6900                  }
6901                },
6902                "loc": {
6903                  "start": {
6904                    "line": 74,
6905                    "column": 50
6906                  },
6907                  "end": {
6908                    "line": 74,
6909                    "column": 63
6910                  }
6911                }
6912              }
6913            ],
6914            "loc": {
6915              "start": {
6916                "line": 74,
6917                "column": 49
6918              },
6919              "end": {
6920                "line": 74,
6921                "column": 64
6922              }
6923            }
6924          },
6925          "loc": {
6926            "start": {
6927              "line": 74,
6928              "column": 1
6929            },
6930            "end": {
6931              "line": 74,
6932              "column": 64
6933            }
6934          }
6935        },
6936        "loc": {
6937          "start": {
6938            "line": 74,
6939            "column": 1
6940          },
6941          "end": {
6942            "line": 74,
6943            "column": 64
6944          }
6945        }
6946      },
6947      "loc": {
6948        "start": {
6949          "line": 74,
6950          "column": 1
6951        },
6952        "end": {
6953          "line": 74,
6954          "column": 65
6955        }
6956      }
6957    }
6958  ],
6959  "loc": {
6960    "start": {
6961      "line": 1,
6962      "column": 1
6963    },
6964    "end": {
6965      "line": 74,
6966      "column": 65
6967    }
6968  }
6969}
6970