JsModule { bom_token: missing (optional), interpreter_token: missing (optional), directives: JsDirectiveList [], items: JsModuleItemList [ JsVariableStatement { declaration: JsVariableDeclaration { await_token: missing (optional), kind: LET_KW@0..4 "let" [] [Whitespace(" ")], declarators: JsVariableDeclaratorList [ JsVariableDeclarator { id: JsIdentifierBinding { name_token: IDENT@4..5 "a" [] [], }, variable_annotation: TsDefiniteVariableAnnotation { excl_token: BANG@5..6 "!" [] [], type_annotation: TsTypeAnnotation { colon_token: COLON@6..8 ":" [] [Whitespace(" ")], ty: TsStringType { string_token: STRING_KW@8..15 "string" [] [Whitespace(" ")], }, }, }, initializer: JsInitializerClause { eq_token: EQ@15..17 "=" [] [Whitespace(" ")], expression: JsStringLiteralExpression { value_token: JS_STRING_LITERAL@17..23 "\"test\"" [] [], }, }, }, ], }, semicolon_token: SEMICOLON@23..24 ";" [] [], }, ], eof_token: EOF@24..25 "" [Newline("\n")] [], } 0: JS_MODULE@0..25 0: (empty) 1: (empty) 2: JS_DIRECTIVE_LIST@0..0 3: JS_MODULE_ITEM_LIST@0..24 0: JS_VARIABLE_STATEMENT@0..24 0: JS_VARIABLE_DECLARATION@0..23 0: (empty) 1: LET_KW@0..4 "let" [] [Whitespace(" ")] 2: JS_VARIABLE_DECLARATOR_LIST@4..23 0: JS_VARIABLE_DECLARATOR@4..23 0: JS_IDENTIFIER_BINDING@4..5 0: IDENT@4..5 "a" [] [] 1: TS_DEFINITE_VARIABLE_ANNOTATION@5..15 0: BANG@5..6 "!" [] [] 1: TS_TYPE_ANNOTATION@6..15 0: COLON@6..8 ":" [] [Whitespace(" ")] 1: TS_STRING_TYPE@8..15 0: STRING_KW@8..15 "string" [] [Whitespace(" ")] 2: JS_INITIALIZER_CLAUSE@15..23 0: EQ@15..17 "=" [] [Whitespace(" ")] 1: JS_STRING_LITERAL_EXPRESSION@17..23 0: JS_STRING_LITERAL@17..23 "\"test\"" [] [] 1: SEMICOLON@23..24 ";" [] [] 4: EOF@24..25 "" [Newline("\n")] [] -- ts_definite_variable_with_initializer.ts:1:16 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ × Declarations with initializers cannot also have definite assignment assertions. > 1 │ let a!: string = "test"; │ ^^^^^^^^ 2 │ i Annotation > 1 │ let a!: string = "test"; │ ^^^^^^^^^ 2 │ -- let a!: string = "test";