{
  "programs": [
    "Program {\n    span: 19..316,\n    kind: Script,\n    body: [\n        _,\n        _,\n        _,\n        _,\n    ],\n}"
  ],
  "stmts": [
    "Decl(\n    _,\n)",
    "Decl(\n    _,\n)",
    "Decl(\n    _,\n)",
    "Expr(\n    ExprStmt {\n        span: 212..224,\n        expr: _,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 208..229,\n        stmts: [\n            _,\n        ],\n    },\n)",
    "Expr(\n    ExprStmt {\n        span: 303..315,\n        expr: _,\n    },\n)",
    "Block(\n    BlockStmt {\n        span: 230..316,\n        stmts: [\n            _,\n        ],\n    },\n)",
    "If(\n    IfStmt {\n        span: 185..316,\n        test: _,\n        cons: _,\n        alt: Some(\n            _,\n        ),\n    },\n)"
  ],
  "decls": [
    "TsInterface(\n    TsInterfaceDecl {\n        span: 19..89,\n        ident: Ident {\n            span: 29..30,\n            sym: \"X\",\n        },\n        declare: false,\n        type_params: [],\n        extends: [],\n        body: [\n            TsTypeMember {\n                span: 35..61,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 35..36,\n                            sym: \"a\",\n                        },\n                    ),\n                ),\n                optional: true,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n            TsTypeMember {\n                span: 60..84,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 60..61,\n                            sym: \"b\",\n                        },\n                    ),\n                ),\n                optional: true,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n        ],\n    },\n)",
    "TsTypeAlias(\n    TsTypeAliasDecl {\n        span: 85..164,\n        ident: Ident {\n            span: 90..94,\n            sym: \"AorB\",\n        },\n        declare: false,\n        type_params: [],\n        ty: _,\n    },\n)",
    "Var(\n    VarDecl {\n        span: 165..187,\n        kind: Const,\n        declare: true,\n        declarators: [\n            VarDeclarator {\n                span: 165..183,\n                name: _,\n                init: None,\n            },\n        ],\n    },\n)"
  ],
  "pats": [
    "Ident(\n    Ident {\n        span: 171..172,\n        sym: \"q\",\n    },\n)"
  ],
  "exprs": [
    "Ident(\n    Ident {\n        span: 189..190,\n        sym: \"q\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 190..196,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 191..192,\n                sym: \"a\",\n            },\n        ),\n    },\n)",
    "Ident(\n    Ident {\n        span: 197..206,\n        sym: \"undefined\",\n    },\n)",
    "Binary(\n    BinaryExpr {\n        span: 193..207,\n        op: NotEqEq,\n        left: _,\n        right: _,\n    },\n)",
    "Ident(\n    Ident {\n        span: 212..213,\n        sym: \"q\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 213..216,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 214..215,\n                sym: \"a\",\n            },\n        ),\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 215..222,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 216..221,\n                sym: \"aProp\",\n            },\n        ),\n    },\n)",
    "Ident(\n    Ident {\n        span: 303..304,\n        sym: \"q\",\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 304..307,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 305..306,\n                sym: \"b\",\n            },\n        ),\n    },\n)",
    "Member(\n    MemberExpr {\n        span: 306..313,\n        obj: _,\n        prop: Ident(\n            Ident {\n                span: 307..312,\n                sym: \"bProp\",\n            },\n        ),\n    },\n)"
  ],
  "module_decls": [],
  "functions": [],
  "classes": [],
  "class_members": [],
  "jsx_elements": [],
  "ts_types": [
    "Keyword(\n    String,\n)",
    "TypeLit(\n    TsTypeLit {\n        span: 39..57,\n        members: [\n            TsTypeMember {\n                span: 41..56,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 41..46,\n                            sym: \"aProp\",\n                        },\n                    ),\n                ),\n                optional: false,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n        ],\n    },\n)",
    "Keyword(\n    String,\n)",
    "TypeLit(\n    TsTypeLit {\n        span: 64..82,\n        members: [\n            TsTypeMember {\n                span: 66..81,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 66..71,\n                            sym: \"bProp\",\n                        },\n                    ),\n                ),\n                optional: false,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n        ],\n    },\n)",
    "Keyword(\n    Object,\n)",
    "Keyword(\n    Undefined,\n)",
    "TypeLit(\n    TsTypeLit {\n        span: 97..126,\n        members: [\n            TsTypeMember {\n                span: 99..111,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 99..100,\n                            sym: \"a\",\n                        },\n                    ),\n                ),\n                optional: false,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n            TsTypeMember {\n                span: 110..124,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 110..111,\n                            sym: \"b\",\n                        },\n                    ),\n                ),\n                optional: false,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n        ],\n    },\n)",
    "Keyword(\n    Undefined,\n)",
    "Keyword(\n    Object,\n)",
    "TypeLit(\n    TsTypeLit {\n        span: 127..155,\n        members: [\n            TsTypeMember {\n                span: 129..144,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 129..130,\n                            sym: \"a\",\n                        },\n                    ),\n                ),\n                optional: false,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n            TsTypeMember {\n                span: 143..154,\n                kind: Property,\n                name: Some(\n                    Ident(\n                        Ident {\n                            span: 143..144,\n                            sym: \"b\",\n                        },\n                    ),\n                ),\n                optional: false,\n                readonly: false,\n                params: [],\n                ty: Some(\n                    _,\n                ),\n            },\n        ],\n    },\n)",
    "Union(\n    TsUnionType {\n        span: 97..155,\n        types: [\n            _,\n            _,\n        ],\n    },\n)"
  ]
}
