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