JsModule {
bom_token: missing (optional),
interpreter_token: missing (optional),
directives: JsDirectiveList [],
items: JsModuleItemList [
JsVariableStatement {
declaration: JsVariableDeclaration {
await_token: missing (optional),
kind: VAR_KW@0..4 "var" [] [Whitespace(" ")],
declarators: JsVariableDeclaratorList [
JsVariableDeclarator {
id: JsIdentifierBinding {
name_token: IDENT@4..5 "x" [] [],
},
variable_annotation: TsTypeAnnotation {
colon_token: COLON@5..7 ":" [] [Whitespace(" ")],
ty: TsMappedType {
l_curly_token: L_CURLY@7..8 "{" [] [],
readonly_modifier: TsMappedTypeReadonlyModifierClause {
operator_token: missing (optional),
readonly_token: READONLY_KW@8..20 "readonly" [Newline("\n"), Whitespace(" ")] [Whitespace(" ")],
},
l_brack_token: L_BRACK@20..21 "[" [] [],
property_name: TsTypeParameterName {
ident_token: IDENT@21..23 "A" [] [Whitespace(" ")],
},
in_token: IN_KW@23..26 "in" [] [Whitespace(" ")],
keys_type: TsTypeOperatorType {
operator_token: KEYOF_KW@26..32 "keyof" [] [Whitespace(" ")],
ty: TsReferenceType {
name: JsReferenceIdentifier {
value_token: IDENT@32..33 "B" [] [],
},
type_arguments: missing (optional),
},
},
as_clause: missing (optional),
r_brack_token: R_BRACK@33..34 "]" [] [],
optional_modifier: TsMappedTypeOptionalModifierClause {
operator_token: missing (optional),
question_mark_token: QUESTION@34..35 "?" [] [],
},
mapped_type: TsTypeAnnotation {
colon_token: COLON@35..37 ":" [] [Whitespace(" ")],
ty: TsAnyType {
any_token: ANY_KW@37..40 "any" [] [],
},
},
semicolon_token: SEMICOLON@40..41 ";" [] [],
r_curly_token: R_CURLY@41..43 "}" [Newline("\n")] [],
},
},
initializer: missing (optional),
},
],
},
semicolon_token: SEMICOLON@43..44 ";" [] [],
},
],
eof_token: EOF@44..45 "" [Newline("\n")] [],
}
0: JS_MODULE@0..45
0: (empty)
1: (empty)
2: JS_DIRECTIVE_LIST@0..0
3: JS_MODULE_ITEM_LIST@0..44
0: JS_VARIABLE_STATEMENT@0..44
0: JS_VARIABLE_DECLARATION@0..43
0: (empty)
1: VAR_KW@0..4 "var" [] [Whitespace(" ")]
2: JS_VARIABLE_DECLARATOR_LIST@4..43
0: JS_VARIABLE_DECLARATOR@4..43
0: JS_IDENTIFIER_BINDING@4..5
0: IDENT@4..5 "x" [] []
1: TS_TYPE_ANNOTATION@5..43
0: COLON@5..7 ":" [] [Whitespace(" ")]
1: TS_MAPPED_TYPE@7..43
0: L_CURLY@7..8 "{" [] []
1: TS_MAPPED_TYPE_READONLY_MODIFIER_CLAUSE@8..20
0: (empty)
1: READONLY_KW@8..20 "readonly" [Newline("\n"), Whitespace(" ")] [Whitespace(" ")]
2: L_BRACK@20..21 "[" [] []
3: TS_TYPE_PARAMETER_NAME@21..23
0: IDENT@21..23 "A" [] [Whitespace(" ")]
4: IN_KW@23..26 "in" [] [Whitespace(" ")]
5: TS_TYPE_OPERATOR_TYPE@26..33
0: KEYOF_KW@26..32 "keyof" [] [Whitespace(" ")]
1: TS_REFERENCE_TYPE@32..33
0: JS_REFERENCE_IDENTIFIER@32..33
0: IDENT@32..33 "B" [] []
1: (empty)
6: (empty)
7: R_BRACK@33..34 "]" [] []
8: TS_MAPPED_TYPE_OPTIONAL_MODIFIER_CLAUSE@34..35
0: (empty)
1: QUESTION@34..35 "?" [] []
9: TS_TYPE_ANNOTATION@35..40
0: COLON@35..37 ":" [] [Whitespace(" ")]
1: TS_ANY_TYPE@37..40
0: ANY_KW@37..40 "any" [] []
10: SEMICOLON@40..41 ";" [] []
11: R_CURLY@41..43 "}" [Newline("\n")] []
2: (empty)
1: SEMICOLON@43..44 ";" [] []
4: EOF@44..45 "" [Newline("\n")] []