JsModule { bom_token: missing (optional), interpreter_token: missing (optional), directives: JsDirectiveList [], items: JsModuleItemList [ JsBogusStatement { items: [ JsDecoratorList [], CLASS_KW@0..6 "class" [] [Whitespace(" ")], JsIdentifierBinding { name_token: IDENT@6..8 "A" [] [Whitespace(" ")], }, JsExtendsClause { extends_token: EXTENDS_KW@8..16 "extends" [] [Whitespace(" ")], super_class: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@16..20 "bar" [] [Whitespace(" ")], }, }, type_arguments: missing (optional), }, JsExtendsClause { extends_token: EXTENDS_KW@20..28 "extends" [] [Whitespace(" ")], super_class: JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@28..32 "foo" [] [Whitespace(" ")], }, }, type_arguments: missing (optional), }, L_CURLY@32..33 "{" [] [], JsClassMemberList [], R_CURLY@33..34 "}" [] [], ], }, JsBogusStatement { items: [ JsDecoratorList [], CLASS_KW@34..41 "class" [Newline("\n")] [Whitespace(" ")], JsIdentifierBinding { name_token: IDENT@41..43 "B" [] [Whitespace(" ")], }, JsBogus { items: [ EXTENDS_KW@43..51 "extends" [] [Whitespace(" ")], JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@51..54 "bar" [] [], }, }, COMMA@54..56 "," [] [Whitespace(" ")], JsBogus { items: [ JsIdentifierExpression { name: JsReferenceIdentifier { value_token: IDENT@56..60 "foo" [] [Whitespace(" ")], }, }, ], }, ], }, L_CURLY@60..61 "{" [] [], JsClassMemberList [], R_CURLY@61..62 "}" [] [], ], }, JsBogusStatement { items: [ JsDecoratorList [], CLASS_KW@62..69 "class" [Newline("\n")] [Whitespace(" ")], JsIdentifierBinding { name_token: IDENT@69..71 "C" [] [Whitespace(" ")], }, JsBogus { items: [ IMPLEMENTS_KW@71..82 "implements" [] [Whitespace(" ")], TsTypeList [ TsNameWithTypeArguments { name: JsReferenceIdentifier { value_token: IDENT@82..84 "B" [] [Whitespace(" ")], }, type_arguments: missing (optional), }, ], ], }, L_CURLY@84..85 "{" [] [], JsClassMemberList [], R_CURLY@85..86 "}" [] [], ], }, ], eof_token: EOF@86..87 "" [Newline("\n")] [], } 0: JS_MODULE@0..87 0: (empty) 1: (empty) 2: JS_DIRECTIVE_LIST@0..0 3: JS_MODULE_ITEM_LIST@0..86 0: JS_BOGUS_STATEMENT@0..34 0: JS_DECORATOR_LIST@0..0 1: CLASS_KW@0..6 "class" [] [Whitespace(" ")] 2: JS_IDENTIFIER_BINDING@6..8 0: IDENT@6..8 "A" [] [Whitespace(" ")] 3: JS_EXTENDS_CLAUSE@8..20 0: EXTENDS_KW@8..16 "extends" [] [Whitespace(" ")] 1: JS_IDENTIFIER_EXPRESSION@16..20 0: JS_REFERENCE_IDENTIFIER@16..20 0: IDENT@16..20 "bar" [] [Whitespace(" ")] 2: (empty) 4: JS_EXTENDS_CLAUSE@20..32 0: EXTENDS_KW@20..28 "extends" [] [Whitespace(" ")] 1: JS_IDENTIFIER_EXPRESSION@28..32 0: JS_REFERENCE_IDENTIFIER@28..32 0: IDENT@28..32 "foo" [] [Whitespace(" ")] 2: (empty) 5: L_CURLY@32..33 "{" [] [] 6: JS_CLASS_MEMBER_LIST@33..33 7: R_CURLY@33..34 "}" [] [] 1: JS_BOGUS_STATEMENT@34..62 0: JS_DECORATOR_LIST@34..34 1: CLASS_KW@34..41 "class" [Newline("\n")] [Whitespace(" ")] 2: JS_IDENTIFIER_BINDING@41..43 0: IDENT@41..43 "B" [] [Whitespace(" ")] 3: JS_BOGUS@43..60 0: EXTENDS_KW@43..51 "extends" [] [Whitespace(" ")] 1: JS_IDENTIFIER_EXPRESSION@51..54 0: JS_REFERENCE_IDENTIFIER@51..54 0: IDENT@51..54 "bar" [] [] 2: COMMA@54..56 "," [] [Whitespace(" ")] 3: JS_BOGUS@56..60 0: JS_IDENTIFIER_EXPRESSION@56..60 0: JS_REFERENCE_IDENTIFIER@56..60 0: IDENT@56..60 "foo" [] [Whitespace(" ")] 4: L_CURLY@60..61 "{" [] [] 5: JS_CLASS_MEMBER_LIST@61..61 6: R_CURLY@61..62 "}" [] [] 2: JS_BOGUS_STATEMENT@62..86 0: JS_DECORATOR_LIST@62..62 1: CLASS_KW@62..69 "class" [Newline("\n")] [Whitespace(" ")] 2: JS_IDENTIFIER_BINDING@69..71 0: IDENT@69..71 "C" [] [Whitespace(" ")] 3: JS_BOGUS@71..84 0: IMPLEMENTS_KW@71..82 "implements" [] [Whitespace(" ")] 1: TS_TYPE_LIST@82..84 0: TS_NAME_WITH_TYPE_ARGUMENTS@82..84 0: JS_REFERENCE_IDENTIFIER@82..84 0: IDENT@82..84 "B" [] [Whitespace(" ")] 1: (empty) 4: L_CURLY@84..85 "{" [] [] 5: JS_CLASS_MEMBER_LIST@85..85 6: R_CURLY@85..86 "}" [] [] 4: EOF@86..87 "" [Newline("\n")] [] -- class_extends_err.js:1:21 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ × 'extends' clause already seen. > 1 │ class A extends bar extends foo {} │ ^^^^^^^^^^^ 2 │ class B extends bar, foo {} 3 │ class C implements B {} i first 'extends' clause > 1 │ class A extends bar extends foo {} │ ^^^^^^^^^^^ 2 │ class B extends bar, foo {} 3 │ class C implements B {} -- class_extends_err.js:2:22 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ × Classes can only extend a single class. 1 │ class A extends bar extends foo {} > 2 │ class B extends bar, foo {} │ ^^^ 3 │ class C implements B {} 4 │ -- class_extends_err.js:3:9 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ × classes can only implement interfaces in TypeScript files 1 │ class A extends bar extends foo {} 2 │ class B extends bar, foo {} > 3 │ class C implements B {} │ ^^^^^^^^^^^^ 4 │ -- class A extends bar extends foo {} class B extends bar, foo {} class C implements B {}