1{
2  "type": "Program",
3  "statements": [
4    {
5      "type": "TSTypeAliasDeclaration",
6      "id": {
7        "type": "Identifier",
8        "name": "a",
9        "loc": {
10          "start": {
11            "line": 17,
12            "column": 6
13          },
14          "end": {
15            "line": 17,
16            "column": 7
17          }
18        }
19      },
20      "typeAnnotation": {
21        "type": "TSSymbolKeyword",
22        "loc": {
23          "start": {
24            "line": 17,
25            "column": 10
26          },
27          "end": {
28            "line": 17,
29            "column": 16
30          }
31        }
32      },
33      "loc": {
34        "start": {
35          "line": 17,
36          "column": 1
37        },
38        "end": {
39          "line": 17,
40          "column": 17
41        }
42      }
43    },
44    {
45      "type": "TSModuleDeclaration",
46      "id": {
47        "type": "Identifier",
48        "name": "ns",
49        "loc": {
50          "start": {
51            "line": 19,
52            "column": 11
53          },
54          "end": {
55            "line": 19,
56            "column": 13
57          }
58        }
59      },
60      "body": {
61        "type": "TSModuleBlock",
62        "body": [
63          {
64            "type": "ExportNamedDeclaration",
65            "declaration": {
66              "type": "TSTypeAliasDeclaration",
67              "id": {
68                "type": "Identifier",
69                "name": "a",
70                "loc": {
71                  "start": {
72                    "line": 20,
73                    "column": 17
74                  },
75                  "end": {
76                    "line": 20,
77                    "column": 18
78                  }
79                }
80              },
81              "typeAnnotation": {
82                "type": "TSStringKeyword",
83                "loc": {
84                  "start": {
85                    "line": 20,
86                    "column": 21
87                  },
88                  "end": {
89                    "line": 20,
90                    "column": 27
91                  }
92                }
93              },
94              "loc": {
95                "start": {
96                  "line": 20,
97                  "column": 12
98                },
99                "end": {
100                  "line": 21,
101                  "column": 2
102                }
103              }
104            },
105            "source": null,
106            "specifiers": [],
107            "loc": {
108              "start": {
109                "line": 20,
110                "column": 5
111              },
112              "end": {
113                "line": 21,
114                "column": 2
115              }
116            }
117          }
118        ],
119        "loc": {
120          "start": {
121            "line": 19,
122            "column": 14
123          },
124          "end": {
125            "line": 21,
126            "column": 2
127          }
128        }
129      },
130      "declare": false,
131      "global": false,
132      "loc": {
133        "start": {
134          "line": 19,
135          "column": 1
136        },
137        "end": {
138          "line": 23,
139          "column": 10
140        }
141      }
142    },
143    {
144      "type": "TSInterfaceDeclaration",
145      "body": {
146        "type": "TSInterfaceBody",
147        "body": [
148          {
149            "type": "TSIndexSignature",
150            "parameters": {
151              "type": "Identifier",
152              "name": "k1",
153              "typeAnnotation": {
154                "type": "TSStringKeyword",
155                "loc": {
156                  "start": {
157                    "line": 24,
158                    "column": 10
159                  },
160                  "end": {
161                    "line": 24,
162                    "column": 16
163                  }
164                }
165              },
166              "loc": {
167                "start": {
168                  "line": 24,
169                  "column": 6
170                },
171                "end": {
172                  "line": 24,
173                  "column": 8
174                }
175              }
176            },
177            "typeAnnotation": {
178              "type": "TSBooleanKeyword",
179              "loc": {
180                "start": {
181                  "line": 24,
182                  "column": 19
183                },
184                "end": {
185                  "line": 24,
186                  "column": 26
187                }
188              }
189            },
190            "readonly": false,
191            "static": false,
192            "loc": {
193              "start": {
194                "line": 24,
195                "column": 5
196              },
197              "end": {
198                "line": 24,
199                "column": 27
200              }
201            }
202          },
203          {
204            "type": "TSIndexSignature",
205            "parameters": {
206              "type": "Identifier",
207              "name": "k2",
208              "typeAnnotation": {
209                "type": "TSNumberKeyword",
210                "loc": {
211                  "start": {
212                    "line": 25,
213                    "column": 10
214                  },
215                  "end": {
216                    "line": 25,
217                    "column": 16
218                  }
219                }
220              },
221              "loc": {
222                "start": {
223                  "line": 25,
224                  "column": 6
225                },
226                "end": {
227                  "line": 25,
228                  "column": 8
229                }
230              }
231            },
232            "typeAnnotation": {
233              "type": "TSBooleanKeyword",
234              "loc": {
235                "start": {
236                  "line": 25,
237                  "column": 19
238                },
239                "end": {
240                  "line": 25,
241                  "column": 26
242                }
243              }
244            },
245            "readonly": false,
246            "static": false,
247            "loc": {
248              "start": {
249                "line": 25,
250                "column": 5
251              },
252              "end": {
253                "line": 25,
254                "column": 27
255              }
256            }
257          },
258          {
259            "type": "TSIndexSignature",
260            "parameters": {
261              "type": "Identifier",
262              "name": "k3",
263              "typeAnnotation": {
264                "type": "TSSymbolKeyword",
265                "loc": {
266                  "start": {
267                    "line": 26,
268                    "column": 10
269                  },
270                  "end": {
271                    "line": 26,
272                    "column": 16
273                  }
274                }
275              },
276              "loc": {
277                "start": {
278                  "line": 26,
279                  "column": 6
280                },
281                "end": {
282                  "line": 26,
283                  "column": 8
284                }
285              }
286            },
287            "typeAnnotation": {
288              "type": "TSBooleanKeyword",
289              "loc": {
290                "start": {
291                  "line": 26,
292                  "column": 19
293                },
294                "end": {
295                  "line": 26,
296                  "column": 26
297                }
298              }
299            },
300            "readonly": false,
301            "static": false,
302            "loc": {
303              "start": {
304                "line": 26,
305                "column": 5
306              },
307              "end": {
308                "line": 26,
309                "column": 27
310              }
311            }
312          },
313          {
314            "type": "TSIndexSignature",
315            "parameters": {
316              "type": "Identifier",
317              "name": "k4",
318              "typeAnnotation": {
319                "type": "TSTemplateLiteralType",
320                "references": [
321                  {
322                    "type": "TSStringKeyword",
323                    "loc": {
324                      "start": {
325                        "line": 27,
326                        "column": 29
327                      },
328                      "end": {
329                        "line": 27,
330                        "column": 35
331                      }
332                    }
333                  }
334                ],
335                "quasis": [
336                  {
337                    "type": "TemplateElement",
338                    "value": {
339                      "raw": "templateLiteral-",
340                      "cooked": "templateLiteral-"
341                    },
342                    "loc": {
343                      "start": {
344                        "line": 27,
345                        "column": 11
346                      },
347                      "end": {
348                        "line": 27,
349                        "column": 27
350                      }
351                    }
352                  },
353                  {
354                    "type": "TemplateElement",
355                    "value": {
356                      "raw": "",
357                      "cooked": ""
358                    },
359                    "loc": {
360                      "start": {
361                        "line": 27,
362                        "column": 36
363                      },
364                      "end": {
365                        "line": 27,
366                        "column": 36
367                      }
368                    }
369                  }
370                ],
371                "loc": {
372                  "start": {
373                    "line": 27,
374                    "column": 10
375                  },
376                  "end": {
377                    "line": 27,
378                    "column": 37
379                  }
380                }
381              },
382              "loc": {
383                "start": {
384                  "line": 27,
385                  "column": 6
386                },
387                "end": {
388                  "line": 27,
389                  "column": 8
390                }
391              }
392            },
393            "typeAnnotation": {
394              "type": "TSBooleanKeyword",
395              "loc": {
396                "start": {
397                  "line": 27,
398                  "column": 40
399                },
400                "end": {
401                  "line": 27,
402                  "column": 47
403                }
404              }
405            },
406            "readonly": false,
407            "static": false,
408            "loc": {
409              "start": {
410                "line": 27,
411                "column": 5
412              },
413              "end": {
414                "line": 27,
415                "column": 48
416              }
417            }
418          }
419        ],
420        "loc": {
421          "start": {
422            "line": 23,
423            "column": 14
424          },
425          "end": {
426            "line": 28,
427            "column": 2
428          }
429        }
430      },
431      "id": {
432        "type": "Identifier",
433        "name": "I1",
434        "loc": {
435          "start": {
436            "line": 23,
437            "column": 11
438          },
439          "end": {
440            "line": 23,
441            "column": 13
442          }
443        }
444      },
445      "extends": [],
446      "loc": {
447        "start": {
448          "line": 23,
449          "column": 1
450        },
451        "end": {
452          "line": 28,
453          "column": 2
454        }
455      }
456    },
457    {
458      "type": "TSInterfaceDeclaration",
459      "body": {
460        "type": "TSInterfaceBody",
461        "body": [
462          {
463            "type": "TSIndexSignature",
464            "parameters": {
465              "type": "Identifier",
466              "name": "k1",
467              "typeAnnotation": {
468                "type": "TSUnionType",
469                "types": [
470                  {
471                    "type": "TSNumberKeyword",
472                    "loc": {
473                      "start": {
474                        "line": 31,
475                        "column": 10
476                      },
477                      "end": {
478                        "line": 31,
479                        "column": 16
480                      }
481                    }
482                  },
483                  {
484                    "type": "TSTypeReference",
485                    "typeName": {
486                      "type": "TSQualifiedName",
487                      "left": {
488                        "type": "Identifier",
489                        "name": "ns",
490                        "loc": {
491                          "start": {
492                            "line": 31,
493                            "column": 19
494                          },
495                          "end": {
496                            "line": 31,
497                            "column": 21
498                          }
499                        }
500                      },
501                      "right": {
502                        "type": "Identifier",
503                        "name": "a",
504                        "loc": {
505                          "start": {
506                            "line": 31,
507                            "column": 22
508                          },
509                          "end": {
510                            "line": 31,
511                            "column": 23
512                          }
513                        }
514                      },
515                      "loc": {
516                        "start": {
517                          "line": 31,
518                          "column": 19
519                        },
520                        "end": {
521                          "line": 31,
522                          "column": 25
523                        }
524                      }
525                    },
526                    "loc": {
527                      "start": {
528                        "line": 31,
529                        "column": 19
530                      },
531                      "end": {
532                        "line": 31,
533                        "column": 25
534                      }
535                    }
536                  },
537                  {
538                    "type": "TSTypeReference",
539                    "typeName": {
540                      "type": "Identifier",
541                      "name": "a",
542                      "loc": {
543                        "start": {
544                          "line": 31,
545                          "column": 26
546                        },
547                        "end": {
548                          "line": 31,
549                          "column": 27
550                        }
551                      }
552                    },
553                    "loc": {
554                      "start": {
555                        "line": 31,
556                        "column": 26
557                      },
558                      "end": {
559                        "line": 31,
560                        "column": 27
561                      }
562                    }
563                  }
564                ],
565                "loc": {
566                  "start": {
567                    "line": 31,
568                    "column": 10
569                  },
570                  "end": {
571                    "line": 31,
572                    "column": 27
573                  }
574                }
575              },
576              "loc": {
577                "start": {
578                  "line": 31,
579                  "column": 6
580                },
581                "end": {
582                  "line": 31,
583                  "column": 8
584                }
585              }
586            },
587            "typeAnnotation": {
588              "type": "TSBooleanKeyword",
589              "loc": {
590                "start": {
591                  "line": 31,
592                  "column": 30
593                },
594                "end": {
595                  "line": 31,
596                  "column": 37
597                }
598              }
599            },
600            "readonly": false,
601            "static": false,
602            "loc": {
603              "start": {
604                "line": 31,
605                "column": 5
606              },
607              "end": {
608                "line": 31,
609                "column": 38
610              }
611            }
612          }
613        ],
614        "loc": {
615          "start": {
616            "line": 30,
617            "column": 14
618          },
619          "end": {
620            "line": 32,
621            "column": 2
622          }
623        }
624      },
625      "id": {
626        "type": "Identifier",
627        "name": "I2",
628        "loc": {
629          "start": {
630            "line": 30,
631            "column": 11
632          },
633          "end": {
634            "line": 30,
635            "column": 13
636          }
637        }
638      },
639      "extends": [],
640      "loc": {
641        "start": {
642          "line": 30,
643          "column": 1
644        },
645        "end": {
646          "line": 32,
647          "column": 2
648        }
649      }
650    },
651    {
652      "type": "ClassDeclaration",
653      "definition": {
654        "id": {
655          "type": "Identifier",
656          "name": "A",
657          "loc": {
658            "start": {
659              "line": 34,
660              "column": 7
661            },
662            "end": {
663              "line": 34,
664              "column": 8
665            }
666          }
667        },
668        "superClass": null,
669        "implements": [],
670        "constructor": {
671          "type": "MethodDefinition",
672          "key": {
673            "type": "Identifier",
674            "name": "constructor",
675            "loc": {
676              "start": {
677                "line": 1,
678                "column": 1
679              },
680              "end": {
681                "line": 1,
682                "column": 1
683              }
684            }
685          },
686          "kind": "constructor",
687          "static": false,
688          "optional": false,
689          "computed": false,
690          "value": {
691            "type": "FunctionExpression",
692            "function": {
693              "type": "ScriptFunction",
694              "id": null,
695              "generator": false,
696              "async": false,
697              "expression": false,
698              "params": [],
699              "body": {
700                "type": "BlockStatement",
701                "statements": [],
702                "loc": {
703                  "start": {
704                    "line": 1,
705                    "column": 1
706                  },
707                  "end": {
708                    "line": 1,
709                    "column": 1
710                  }
711                }
712              },
713              "loc": {
714                "start": {
715                  "line": 1,
716                  "column": 1
717                },
718                "end": {
719                  "line": 1,
720                  "column": 1
721                }
722              }
723            },
724            "loc": {
725              "start": {
726                "line": 1,
727                "column": 1
728              },
729              "end": {
730                "line": 1,
731                "column": 1
732              }
733            }
734          },
735          "overloads": [],
736          "decorators": [],
737          "annotations": [],
738          "loc": {
739            "start": {
740              "line": 34,
741              "column": 1
742            },
743            "end": {
744              "line": 36,
745              "column": 2
746            }
747          }
748        },
749        "body": [],
750        "indexSignatures": [
751          {
752            "type": "TSIndexSignature",
753            "parameters": {
754              "type": "Identifier",
755              "name": "k1",
756              "typeAnnotation": {
757                "type": "TSUnionType",
758                "types": [
759                  {
760                    "type": "TSStringKeyword",
761                    "loc": {
762                      "start": {
763                        "line": 35,
764                        "column": 10
765                      },
766                      "end": {
767                        "line": 35,
768                        "column": 16
769                      }
770                    }
771                  },
772                  {
773                    "type": "TSNumberKeyword",
774                    "loc": {
775                      "start": {
776                        "line": 35,
777                        "column": 19
778                      },
779                      "end": {
780                        "line": 35,
781                        "column": 25
782                      }
783                    }
784                  },
785                  {
786                    "type": "TSSymbolKeyword",
787                    "loc": {
788                      "start": {
789                        "line": 35,
790                        "column": 28
791                      },
792                      "end": {
793                        "line": 35,
794                        "column": 34
795                      }
796                    }
797                  },
798                  {
799                    "type": "TSTemplateLiteralType",
800                    "references": [
801                      {
802                        "type": "TSStringKeyword",
803                        "loc": {
804                          "start": {
805                            "line": 35,
806                            "column": 56
807                          },
808                          "end": {
809                            "line": 35,
810                            "column": 62
811                          }
812                        }
813                      }
814                    ],
815                    "quasis": [
816                      {
817                        "type": "TemplateElement",
818                        "value": {
819                          "raw": "templateLiteral-",
820                          "cooked": "templateLiteral-"
821                        },
822                        "loc": {
823                          "start": {
824                            "line": 35,
825                            "column": 38
826                          },
827                          "end": {
828                            "line": 35,
829                            "column": 54
830                          }
831                        }
832                      },
833                      {
834                        "type": "TemplateElement",
835                        "value": {
836                          "raw": "",
837                          "cooked": ""
838                        },
839                        "loc": {
840                          "start": {
841                            "line": 35,
842                            "column": 63
843                          },
844                          "end": {
845                            "line": 35,
846                            "column": 63
847                          }
848                        }
849                      }
850                    ],
851                    "loc": {
852                      "start": {
853                        "line": 35,
854                        "column": 37
855                      },
856                      "end": {
857                        "line": 35,
858                        "column": 64
859                      }
860                    }
861                  }
862                ],
863                "loc": {
864                  "start": {
865                    "line": 35,
866                    "column": 10
867                  },
868                  "end": {
869                    "line": 35,
870                    "column": 64
871                  }
872                }
873              },
874              "loc": {
875                "start": {
876                  "line": 35,
877                  "column": 6
878                },
879                "end": {
880                  "line": 35,
881                  "column": 8
882                }
883              }
884            },
885            "typeAnnotation": {
886              "type": "TSBooleanKeyword",
887              "loc": {
888                "start": {
889                  "line": 35,
890                  "column": 67
891                },
892                "end": {
893                  "line": 35,
894                  "column": 74
895                }
896              }
897            },
898            "readonly": false,
899            "static": false,
900            "loc": {
901              "start": {
902                "line": 35,
903                "column": 5
904              },
905              "end": {
906                "line": 35,
907                "column": 74
908              }
909            }
910          }
911        ],
912        "loc": {
913          "start": {
914            "line": 34,
915            "column": 9
916          },
917          "end": {
918            "line": 36,
919            "column": 2
920          }
921        }
922      },
923      "decorators": [],
924      "isAnnotationDeclaration": false,
925      "loc": {
926        "start": {
927          "line": 34,
928          "column": 1
929        },
930        "end": {
931          "line": 36,
932          "column": 2
933        }
934      }
935    },
936    {
937      "type": "VariableDeclaration",
938      "declarations": [
939        {
940          "type": "VariableDeclarator",
941          "id": {
942            "type": "Identifier",
943            "name": "x",
944            "typeAnnotation": {
945              "type": "TSTypeLiteral",
946              "members": [
947                {
948                  "type": "TSIndexSignature",
949                  "parameters": {
950                    "type": "Identifier",
951                    "name": "k",
952                    "typeAnnotation": {
953                      "type": "TSUnionType",
954                      "types": [
955                        {
956                          "type": "TSStringKeyword",
957                          "loc": {
958                            "start": {
959                              "line": 38,
960                              "column": 16
961                            },
962                            "end": {
963                              "line": 38,
964                              "column": 22
965                            }
966                          }
967                        },
968                        {
969                          "type": "TSNumberKeyword",
970                          "loc": {
971                            "start": {
972                              "line": 38,
973                              "column": 25
974                            },
975                            "end": {
976                              "line": 38,
977                              "column": 31
978                            }
979                          }
980                        },
981                        {
982                          "type": "TSSymbolKeyword",
983                          "loc": {
984                            "start": {
985                              "line": 38,
986                              "column": 34
987                            },
988                            "end": {
989                              "line": 38,
990                              "column": 40
991                            }
992                          }
993                        },
994                        {
995                          "type": "TSTemplateLiteralType",
996                          "references": [
997                            {
998                              "type": "TSStringKeyword",
999                              "loc": {
1000                                "start": {
1001                                  "line": 38,
1002                                  "column": 62
1003                                },
1004                                "end": {
1005                                  "line": 38,
1006                                  "column": 68
1007                                }
1008                              }
1009                            }
1010                          ],
1011                          "quasis": [
1012                            {
1013                              "type": "TemplateElement",
1014                              "value": {
1015                                "raw": "templateLiteral-",
1016                                "cooked": "templateLiteral-"
1017                              },
1018                              "loc": {
1019                                "start": {
1020                                  "line": 38,
1021                                  "column": 44
1022                                },
1023                                "end": {
1024                                  "line": 38,
1025                                  "column": 60
1026                                }
1027                              }
1028                            },
1029                            {
1030                              "type": "TemplateElement",
1031                              "value": {
1032                                "raw": "",
1033                                "cooked": ""
1034                              },
1035                              "loc": {
1036                                "start": {
1037                                  "line": 38,
1038                                  "column": 69
1039                                },
1040                                "end": {
1041                                  "line": 38,
1042                                  "column": 69
1043                                }
1044                              }
1045                            }
1046                          ],
1047                          "loc": {
1048                            "start": {
1049                              "line": 38,
1050                              "column": 43
1051                            },
1052                            "end": {
1053                              "line": 38,
1054                              "column": 70
1055                            }
1056                          }
1057                        }
1058                      ],
1059                      "loc": {
1060                        "start": {
1061                          "line": 38,
1062                          "column": 16
1063                        },
1064                        "end": {
1065                          "line": 38,
1066                          "column": 70
1067                        }
1068                      }
1069                    },
1070                    "loc": {
1071                      "start": {
1072                        "line": 38,
1073                        "column": 13
1074                      },
1075                      "end": {
1076                        "line": 38,
1077                        "column": 14
1078                      }
1079                    }
1080                  },
1081                  "typeAnnotation": {
1082                    "type": "TSBooleanKeyword",
1083                    "loc": {
1084                      "start": {
1085                        "line": 38,
1086                        "column": 73
1087                      },
1088                      "end": {
1089                        "line": 38,
1090                        "column": 80
1091                      }
1092                    }
1093                  },
1094                  "readonly": false,
1095                  "static": false,
1096                  "loc": {
1097                    "start": {
1098                      "line": 38,
1099                      "column": 12
1100                    },
1101                    "end": {
1102                      "line": 38,
1103                      "column": 82
1104                    }
1105                  }
1106                }
1107              ],
1108              "loc": {
1109                "start": {
1110                  "line": 38,
1111                  "column": 10
1112                },
1113                "end": {
1114                  "line": 38,
1115                  "column": 82
1116                }
1117              }
1118            },
1119            "loc": {
1120              "start": {
1121                "line": 38,
1122                "column": 7
1123              },
1124              "end": {
1125                "line": 38,
1126                "column": 8
1127              }
1128            }
1129          },
1130          "init": {
1131            "type": "ObjectExpression",
1132            "properties": [],
1133            "loc": {
1134              "start": {
1135                "line": 38,
1136                "column": 85
1137              },
1138              "end": {
1139                "line": 38,
1140                "column": 87
1141              }
1142            }
1143          },
1144          "loc": {
1145            "start": {
1146              "line": 38,
1147              "column": 7
1148            },
1149            "end": {
1150              "line": 38,
1151              "column": 87
1152            }
1153          }
1154        }
1155      ],
1156      "kind": "const",
1157      "loc": {
1158        "start": {
1159          "line": 38,
1160          "column": 1
1161        },
1162        "end": {
1163          "line": 38,
1164          "column": 88
1165        }
1166      }
1167    }
1168  ],
1169  "loc": {
1170    "start": {
1171      "line": 1,
1172      "column": 1
1173    },
1174    "end": {
1175      "line": 39,
1176      "column": 1
1177    }
1178  }
1179}
1180