From ccc35075bc9987bd3262cbe57f4dc0601db23bdc Mon Sep 17 00:00:00 2001 From: Steffen Heil | secforge Date: Sat, 8 Nov 2025 18:42:39 +0100 Subject: [PATCH 1/4] fix(es/parser): handle type assertions with non-callable types in binary expressions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After type assertions (`as`) and satisfies expressions, the parser needs to determine whether a following `<` token is a comparison operator or the start of type parameters. This fix ensures that `<` is lexed as a comparison operator when the type cannot have type parameters. Previously only primitive keyword types and literals were handled. This extends the logic to cover all non-callable type constructs: - Primitive keyword types (number, string, boolean, etc.) - Literal types (2, "x", true, 10n) - this type - Array types (number[], Array) - Tuple types ([number, string]) - Union/intersection types (A | B, A & B) - Type operators (keyof T, readonly T, unique symbol) - Indexed access types (T[K]) - Conditional types (T extends U ? X : Y) - Mapped types ({ [K in keyof T]: V }) - Type predicates (x is string) This prevents parsing errors when these type assertions are followed by comparison operators. Examples that now parse correctly: - (i as number[]) < 5 - (i as [number, string]) < 5 - (i as number | string) < 5 - (i as keyof T) < 5 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../swc_ecma_lexer/src/common/parser/expr.rs | 69 +- .../cast/primitive-vs-reference/input.ts | 67 + .../cast/primitive-vs-reference/input.ts.json | 2817 +++++++++++++++++ 3 files changed, 2936 insertions(+), 17 deletions(-) create mode 100644 crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts create mode 100644 crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json diff --git a/crates/swc_ecma_lexer/src/common/parser/expr.rs b/crates/swc_ecma_lexer/src/common/parser/expr.rs index 8a74f6fb7899..36f929421983 100644 --- a/crates/swc_ecma_lexer/src/common/parser/expr.rs +++ b/crates/swc_ecma_lexer/src/common/parser/expr.rs @@ -1296,6 +1296,26 @@ pub fn parse_bin_op_recursively<'a>( } } +/// Returns true if the type cannot be followed by type parameters. +/// After these types, `<` should be lexed as a comparison operator, not as +/// the start of type parameters. +fn type_cannot_have_type_params(type_ann: &TsType) -> bool { + matches!( + type_ann, + TsType::TsKeywordType(_) + | TsType::TsLitType(_) + | TsType::TsThisType(_) + | TsType::TsArrayType(_) + | TsType::TsTupleType(_) + | TsType::TsUnionOrIntersectionType(_) + | TsType::TsTypePredicate(_) + | TsType::TsIndexedAccessType(_) + | TsType::TsConditionalType(_) + | TsType::TsMappedType(_) + | TsType::TsTypeOperator(_) + ) +} + /// Returns `(left, Some(next_prec))` or `(expr, None)`. fn parse_bin_op_recursively_inner<'a, P: Parser<'a>>( p: &mut P, @@ -1308,39 +1328,54 @@ fn parse_bin_op_recursively_inner<'a, P: Parser<'a>>( if PREC_OF_IN > min_prec && p.input().is(&P::Token::AS) { let start = left.span_lo(); let expr = left; - let node = if peek!(p).is_some_and(|cur| cur.is_const()) { + return if peek!(p).is_some_and(|cur| cur.is_const()) { p.bump(); // as p.bump(); // const - TsConstAssertion { + let node = TsConstAssertion { span: p.span(start), expr, } - .into() + .into(); + // as const is treated as primitive type + p.do_inside_of_context(Context::ShouldNotLexLtOrGtAsType, |p| { + parse_bin_op_recursively_inner(p, node, min_prec) + }) } else { let type_ann = next_then_parse_ts_type(p)?; - TsAsExpr { + let prevent_type_params = type_cannot_have_type_params(&type_ann); + let node = TsAsExpr { span: p.span(start), expr, type_ann, } - .into() + .into(); + if prevent_type_params { + p.do_inside_of_context(Context::ShouldNotLexLtOrGtAsType, |p| { + parse_bin_op_recursively_inner(p, node, min_prec) + }) + } else { + parse_bin_op_recursively_inner(p, node, min_prec) + } }; - - return parse_bin_op_recursively_inner(p, node, min_prec); } else if p.input().is(&P::Token::SATISFIES) { let start = left.span_lo(); let expr = left; - let node = { - let type_ann = next_then_parse_ts_type(p)?; - TsSatisfiesExpr { - span: p.span(start), - expr, - type_ann, - } - .into() - }; + let type_ann = next_then_parse_ts_type(p)?; + let prevent_type_params = type_cannot_have_type_params(&type_ann); + let node = TsSatisfiesExpr { + span: p.span(start), + expr, + type_ann, + } + .into(); - return parse_bin_op_recursively_inner(p, node, min_prec); + return if prevent_type_params { + p.do_inside_of_context(Context::ShouldNotLexLtOrGtAsType, |p| { + parse_bin_op_recursively_inner(p, node, min_prec) + }) + } else { + parse_bin_op_recursively_inner(p, node, min_prec) + }; } } diff --git a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts new file mode 100644 index 000000000000..7b1f2dd61050 --- /dev/null +++ b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts @@ -0,0 +1,67 @@ +// Primitive keyword types - < should be comparison operator +(i as number) < 5; +(i as string) < "hello"; +(i as boolean) < true; +(i as any) < foo; +(i as void) < bar; +(i as undefined) < baz; +(i as null) < qux; +(i as never) < abc; +(i as unknown) < def; +(i as object) < ghi; +(i as symbol) < jkl; +(i as bigint) < 10n; + +// Reference types - < can start type parameters +(i as Number)(x); +(i as String)(x); +(i as Boolean)(x); +(i as Array)(x); +(i as MyType)(x); + +// as const - treated as primitive +(i as const) < 5; + +// satisfies with primitive types +(i satisfies number) < 5; +(i satisfies string) < "test"; + +// satisfies with reference types +(i satisfies Number)(x); +(i satisfies MyType)(x); + +// Literal types - should be treated as primitives +(i as 2) < 5; +(i as "x") < "y"; +(i as true) < false; +(i as 10n) < 20n; + +// this type - non-callable +(i as this) < 5; + +// Array types - non-callable (already complete) +(i as number[]) < 5; +(i as Array) < 5; + +// Tuple types - non-callable +(i as [number, string]) < 5; + +// Union types - non-callable +(i as number | string) < 5; + +// Intersection types - non-callable +(i as A & B) < 5; + +// Type operators - non-callable +(i as keyof T) < 5; +(i as readonly number[]) < 5; +(i as unique symbol) < 5; + +// Indexed access types - non-callable +(i as T[K]) < 5; + +// Conditional types - non-callable +(i as T extends U ? X : Y) < 5; + +// Mapped types - non-callable +(i as { [K in keyof T]: V }) < 5; diff --git a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json new file mode 100644 index 000000000000..62fb94375fec --- /dev/null +++ b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json @@ -0,0 +1,2817 @@ +{ + "type": "Script", + "span": { + "start": 62, + "end": 1448 + }, + "body": [ + { + "type": "ExpressionStatement", + "span": { + "start": 62, + "end": 80 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 62, + "end": 79 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 62, + "end": 75 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 63, + "end": 74 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 63, + "end": 64 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 68, + "end": 74 + }, + "kind": "number" + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 78, + "end": 79 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 81, + "end": 105 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 81, + "end": 104 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 81, + "end": 94 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 82, + "end": 93 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 82, + "end": 83 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 87, + "end": 93 + }, + "kind": "string" + } + } + }, + "right": { + "type": "StringLiteral", + "span": { + "start": 97, + "end": 104 + }, + "value": "hello", + "raw": "\"hello\"" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 106, + "end": 128 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 106, + "end": 127 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 106, + "end": 120 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 107, + "end": 119 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 107, + "end": 108 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 112, + "end": 119 + }, + "kind": "boolean" + } + } + }, + "right": { + "type": "BooleanLiteral", + "span": { + "start": 123, + "end": 127 + }, + "value": true + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 129, + "end": 146 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 129, + "end": 145 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 129, + "end": 139 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 130, + "end": 138 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 130, + "end": 131 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 135, + "end": 138 + }, + "kind": "any" + } + } + }, + "right": { + "type": "Identifier", + "span": { + "start": 142, + "end": 145 + }, + "ctxt": 0, + "value": "foo", + "optional": false + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 147, + "end": 165 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 147, + "end": 164 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 147, + "end": 158 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 148, + "end": 157 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 148, + "end": 149 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 153, + "end": 157 + }, + "kind": "void" + } + } + }, + "right": { + "type": "Identifier", + "span": { + "start": 161, + "end": 164 + }, + "ctxt": 0, + "value": "bar", + "optional": false + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 166, + "end": 189 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 166, + "end": 188 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 166, + "end": 182 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 167, + "end": 181 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 167, + "end": 168 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 172, + "end": 181 + }, + "kind": "undefined" + } + } + }, + "right": { + "type": "Identifier", + "span": { + "start": 185, + "end": 188 + }, + "ctxt": 0, + "value": "baz", + "optional": false + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 190, + "end": 208 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 190, + "end": 207 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 190, + "end": 201 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 191, + "end": 200 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 191, + "end": 192 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 196, + "end": 200 + }, + "kind": "null" + } + } + }, + "right": { + "type": "Identifier", + "span": { + "start": 204, + "end": 207 + }, + "ctxt": 0, + "value": "qux", + "optional": false + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 209, + "end": 228 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 209, + "end": 227 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 209, + "end": 221 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 210, + "end": 220 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 210, + "end": 211 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 215, + "end": 220 + }, + "kind": "never" + } + } + }, + "right": { + "type": "Identifier", + "span": { + "start": 224, + "end": 227 + }, + "ctxt": 0, + "value": "abc", + "optional": false + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 229, + "end": 250 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 229, + "end": 249 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 229, + "end": 243 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 230, + "end": 242 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 230, + "end": 231 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 235, + "end": 242 + }, + "kind": "unknown" + } + } + }, + "right": { + "type": "Identifier", + "span": { + "start": 246, + "end": 249 + }, + "ctxt": 0, + "value": "def", + "optional": false + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 251, + "end": 271 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 251, + "end": 270 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 251, + "end": 264 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 252, + "end": 263 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 252, + "end": 253 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 257, + "end": 263 + }, + "kind": "object" + } + } + }, + "right": { + "type": "Identifier", + "span": { + "start": 267, + "end": 270 + }, + "ctxt": 0, + "value": "ghi", + "optional": false + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 272, + "end": 292 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 272, + "end": 291 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 272, + "end": 285 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 273, + "end": 284 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 273, + "end": 274 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 278, + "end": 284 + }, + "kind": "symbol" + } + } + }, + "right": { + "type": "Identifier", + "span": { + "start": 288, + "end": 291 + }, + "ctxt": 0, + "value": "jkl", + "optional": false + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 293, + "end": 313 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 293, + "end": 312 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 293, + "end": 306 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 294, + "end": 305 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 294, + "end": 295 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 299, + "end": 305 + }, + "kind": "bigint" + } + } + }, + "right": { + "type": "BigIntLiteral", + "span": { + "start": 309, + "end": 312 + }, + "value": [ + 1, + [ + 10 + ] + ], + "raw": "10n" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 364, + "end": 384 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 364, + "end": 383 + }, + "ctxt": 0, + "callee": { + "type": "ParenthesisExpression", + "span": { + "start": 364, + "end": 377 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 365, + "end": 376 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 365, + "end": 366 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 370, + "end": 376 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 370, + "end": 376 + }, + "ctxt": 0, + "value": "Number", + "optional": false + }, + "typeParams": null + } + } + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "Identifier", + "span": { + "start": 381, + "end": 382 + }, + "ctxt": 0, + "value": "x", + "optional": false + } + } + ], + "typeArguments": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 377, + "end": 380 + }, + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 378, + "end": 379 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 378, + "end": 379 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 385, + "end": 405 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 385, + "end": 404 + }, + "ctxt": 0, + "callee": { + "type": "ParenthesisExpression", + "span": { + "start": 385, + "end": 398 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 386, + "end": 397 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 386, + "end": 387 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 391, + "end": 397 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 391, + "end": 397 + }, + "ctxt": 0, + "value": "String", + "optional": false + }, + "typeParams": null + } + } + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "Identifier", + "span": { + "start": 402, + "end": 403 + }, + "ctxt": 0, + "value": "x", + "optional": false + } + } + ], + "typeArguments": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 398, + "end": 401 + }, + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 399, + "end": 400 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 399, + "end": 400 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 406, + "end": 427 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 406, + "end": 426 + }, + "ctxt": 0, + "callee": { + "type": "ParenthesisExpression", + "span": { + "start": 406, + "end": 420 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 407, + "end": 419 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 407, + "end": 408 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 412, + "end": 419 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 412, + "end": 419 + }, + "ctxt": 0, + "value": "Boolean", + "optional": false + }, + "typeParams": null + } + } + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "Identifier", + "span": { + "start": 424, + "end": 425 + }, + "ctxt": 0, + "value": "x", + "optional": false + } + } + ], + "typeArguments": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 420, + "end": 423 + }, + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 421, + "end": 422 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 421, + "end": 422 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 428, + "end": 447 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 428, + "end": 446 + }, + "ctxt": 0, + "callee": { + "type": "ParenthesisExpression", + "span": { + "start": 428, + "end": 440 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 429, + "end": 439 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 429, + "end": 430 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 434, + "end": 439 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 434, + "end": 439 + }, + "ctxt": 0, + "value": "Array", + "optional": false + }, + "typeParams": null + } + } + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "Identifier", + "span": { + "start": 444, + "end": 445 + }, + "ctxt": 0, + "value": "x", + "optional": false + } + } + ], + "typeArguments": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 440, + "end": 443 + }, + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 441, + "end": 442 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 441, + "end": 442 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 448, + "end": 468 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 448, + "end": 467 + }, + "ctxt": 0, + "callee": { + "type": "ParenthesisExpression", + "span": { + "start": 448, + "end": 461 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 449, + "end": 460 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 449, + "end": 450 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 454, + "end": 460 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 454, + "end": 460 + }, + "ctxt": 0, + "value": "MyType", + "optional": false + }, + "typeParams": null + } + } + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "Identifier", + "span": { + "start": 465, + "end": 466 + }, + "ctxt": 0, + "value": "x", + "optional": false + } + } + ], + "typeArguments": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 461, + "end": 464 + }, + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 462, + "end": 463 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 462, + "end": 463 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 505, + "end": 522 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 505, + "end": 521 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 505, + "end": 517 + }, + "expression": { + "type": "TsConstAssertion", + "span": { + "start": 506, + "end": 516 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 506, + "end": 507 + }, + "ctxt": 0, + "value": "i", + "optional": false + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 520, + "end": 521 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 558, + "end": 583 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 558, + "end": 582 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 558, + "end": 578 + }, + "expression": { + "type": "TsSatisfiesExpression", + "span": { + "start": 559, + "end": 577 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 559, + "end": 560 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 571, + "end": 577 + }, + "kind": "number" + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 581, + "end": 582 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 584, + "end": 614 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 584, + "end": 613 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 584, + "end": 604 + }, + "expression": { + "type": "TsSatisfiesExpression", + "span": { + "start": 585, + "end": 603 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 585, + "end": 586 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 597, + "end": 603 + }, + "kind": "string" + } + } + }, + "right": { + "type": "StringLiteral", + "span": { + "start": 607, + "end": 613 + }, + "value": "test", + "raw": "\"test\"" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 650, + "end": 677 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 650, + "end": 676 + }, + "ctxt": 0, + "callee": { + "type": "ParenthesisExpression", + "span": { + "start": 650, + "end": 670 + }, + "expression": { + "type": "TsSatisfiesExpression", + "span": { + "start": 651, + "end": 669 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 651, + "end": 652 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 663, + "end": 669 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 663, + "end": 669 + }, + "ctxt": 0, + "value": "Number", + "optional": false + }, + "typeParams": null + } + } + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "Identifier", + "span": { + "start": 674, + "end": 675 + }, + "ctxt": 0, + "value": "x", + "optional": false + } + } + ], + "typeArguments": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 670, + "end": 673 + }, + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 671, + "end": 672 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 671, + "end": 672 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 678, + "end": 705 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 678, + "end": 704 + }, + "ctxt": 0, + "callee": { + "type": "ParenthesisExpression", + "span": { + "start": 678, + "end": 698 + }, + "expression": { + "type": "TsSatisfiesExpression", + "span": { + "start": 679, + "end": 697 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 679, + "end": 680 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 691, + "end": 697 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 691, + "end": 697 + }, + "ctxt": 0, + "value": "MyType", + "optional": false + }, + "typeParams": null + } + } + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "Identifier", + "span": { + "start": 702, + "end": 703 + }, + "ctxt": 0, + "value": "x", + "optional": false + } + } + ], + "typeArguments": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 698, + "end": 701 + }, + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 699, + "end": 700 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 699, + "end": 700 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 758, + "end": 771 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 758, + "end": 770 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 758, + "end": 766 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 759, + "end": 765 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 759, + "end": 760 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsLiteralType", + "span": { + "start": 764, + "end": 765 + }, + "literal": { + "type": "NumericLiteral", + "span": { + "start": 764, + "end": 765 + }, + "value": 2.0, + "raw": "2" + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 769, + "end": 770 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 772, + "end": 789 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 772, + "end": 788 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 772, + "end": 782 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 773, + "end": 781 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 773, + "end": 774 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsLiteralType", + "span": { + "start": 778, + "end": 781 + }, + "literal": { + "type": "StringLiteral", + "span": { + "start": 778, + "end": 781 + }, + "value": "x", + "raw": "\"x\"" + } + } + } + }, + "right": { + "type": "StringLiteral", + "span": { + "start": 785, + "end": 788 + }, + "value": "y", + "raw": "\"y\"" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 790, + "end": 810 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 790, + "end": 809 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 790, + "end": 801 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 791, + "end": 800 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 791, + "end": 792 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsLiteralType", + "span": { + "start": 796, + "end": 800 + }, + "literal": { + "type": "BooleanLiteral", + "span": { + "start": 796, + "end": 800 + }, + "value": true + } + } + } + }, + "right": { + "type": "BooleanLiteral", + "span": { + "start": 804, + "end": 809 + }, + "value": false + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 811, + "end": 828 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 811, + "end": 827 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 811, + "end": 821 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 812, + "end": 820 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 812, + "end": 813 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsLiteralType", + "span": { + "start": 817, + "end": 820 + }, + "literal": { + "type": "BigIntLiteral", + "span": { + "start": 817, + "end": 820 + }, + "value": [ + 1, + [ + 10 + ] + ], + "raw": "10n" + } + } + } + }, + "right": { + "type": "BigIntLiteral", + "span": { + "start": 824, + "end": 827 + }, + "value": [ + 1, + [ + 20 + ] + ], + "raw": "20n" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 858, + "end": 874 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 858, + "end": 873 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 858, + "end": 869 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 859, + "end": 868 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 859, + "end": 860 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsThisType", + "span": { + "start": 864, + "end": 868 + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 872, + "end": 873 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 925, + "end": 945 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 925, + "end": 944 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 925, + "end": 940 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 926, + "end": 939 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 926, + "end": 927 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsArrayType", + "span": { + "start": 931, + "end": 939 + }, + "elemType": { + "type": "TsKeywordType", + "span": { + "start": 931, + "end": 937 + }, + "kind": "number" + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 943, + "end": 944 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 946, + "end": 971 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 946, + "end": 970 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 946, + "end": 966 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 947, + "end": 965 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 947, + "end": 948 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 952, + "end": 965 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 952, + "end": 957 + }, + "ctxt": 0, + "value": "Array", + "optional": false + }, + "typeParams": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 957, + "end": 965 + }, + "params": [ + { + "type": "TsKeywordType", + "span": { + "start": 958, + "end": 964 + }, + "kind": "number" + } + ] + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 969, + "end": 970 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 1003, + "end": 1031 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 1003, + "end": 1030 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 1003, + "end": 1026 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 1004, + "end": 1025 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 1004, + "end": 1005 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTupleType", + "span": { + "start": 1009, + "end": 1025 + }, + "elemTypes": [ + { + "type": "TsTupleElement", + "span": { + "start": 1010, + "end": 1016 + }, + "label": null, + "ty": { + "type": "TsKeywordType", + "span": { + "start": 1010, + "end": 1016 + }, + "kind": "number" + } + }, + { + "type": "TsTupleElement", + "span": { + "start": 1018, + "end": 1024 + }, + "label": null, + "ty": { + "type": "TsKeywordType", + "span": { + "start": 1018, + "end": 1024 + }, + "kind": "string" + } + } + ] + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 1029, + "end": 1030 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 1063, + "end": 1090 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 1063, + "end": 1089 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 1063, + "end": 1085 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 1064, + "end": 1084 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 1064, + "end": 1065 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsUnionType", + "span": { + "start": 1069, + "end": 1084 + }, + "types": [ + { + "type": "TsKeywordType", + "span": { + "start": 1069, + "end": 1075 + }, + "kind": "number" + }, + { + "type": "TsKeywordType", + "span": { + "start": 1078, + "end": 1084 + }, + "kind": "string" + } + ] + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 1088, + "end": 1089 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 1129, + "end": 1146 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 1129, + "end": 1145 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 1129, + "end": 1141 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 1130, + "end": 1140 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 1130, + "end": 1131 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsIntersectionType", + "span": { + "start": 1135, + "end": 1140 + }, + "types": [ + { + "type": "TsTypeReference", + "span": { + "start": 1135, + "end": 1136 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1135, + "end": 1136 + }, + "ctxt": 0, + "value": "A", + "optional": false + }, + "typeParams": null + }, + { + "type": "TsTypeReference", + "span": { + "start": 1139, + "end": 1140 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1139, + "end": 1140 + }, + "ctxt": 0, + "value": "B", + "optional": false + }, + "typeParams": null + } + ] + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 1144, + "end": 1145 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 1181, + "end": 1200 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 1181, + "end": 1199 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 1181, + "end": 1195 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 1182, + "end": 1194 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 1182, + "end": 1183 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeOperator", + "span": { + "start": 1187, + "end": 1194 + }, + "op": "keyof", + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 1193, + "end": 1194 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1193, + "end": 1194 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 1198, + "end": 1199 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 1201, + "end": 1230 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 1201, + "end": 1229 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 1201, + "end": 1225 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 1202, + "end": 1224 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 1202, + "end": 1203 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeOperator", + "span": { + "start": 1207, + "end": 1224 + }, + "op": "readonly", + "typeAnnotation": { + "type": "TsArrayType", + "span": { + "start": 1216, + "end": 1224 + }, + "elemType": { + "type": "TsKeywordType", + "span": { + "start": 1216, + "end": 1222 + }, + "kind": "number" + } + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 1228, + "end": 1229 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 1231, + "end": 1256 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 1231, + "end": 1255 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 1231, + "end": 1251 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 1232, + "end": 1250 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 1232, + "end": 1233 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeOperator", + "span": { + "start": 1237, + "end": 1250 + }, + "op": "unique", + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 1244, + "end": 1250 + }, + "kind": "symbol" + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 1254, + "end": 1255 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 1297, + "end": 1313 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 1297, + "end": 1312 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 1297, + "end": 1308 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 1298, + "end": 1307 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 1298, + "end": 1299 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsIndexedAccessType", + "span": { + "start": 1303, + "end": 1307 + }, + "readonly": false, + "objectType": { + "type": "TsTypeReference", + "span": { + "start": 1303, + "end": 1304 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1303, + "end": 1304 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + }, + "indexType": { + "type": "TsTypeReference", + "span": { + "start": 1305, + "end": 1306 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1305, + "end": 1306 + }, + "ctxt": 0, + "value": "K", + "optional": false + }, + "typeParams": null + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 1311, + "end": 1312 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 1351, + "end": 1382 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 1351, + "end": 1381 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 1351, + "end": 1377 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 1352, + "end": 1376 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 1352, + "end": 1353 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsConditionalType", + "span": { + "start": 1357, + "end": 1376 + }, + "checkType": { + "type": "TsTypeReference", + "span": { + "start": 1357, + "end": 1358 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1357, + "end": 1358 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + }, + "extendsType": { + "type": "TsTypeReference", + "span": { + "start": 1367, + "end": 1368 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1367, + "end": 1368 + }, + "ctxt": 0, + "value": "U", + "optional": false + }, + "typeParams": null + }, + "trueType": { + "type": "TsTypeReference", + "span": { + "start": 1371, + "end": 1372 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1371, + "end": 1372 + }, + "ctxt": 0, + "value": "X", + "optional": false + }, + "typeParams": null + }, + "falseType": { + "type": "TsTypeReference", + "span": { + "start": 1375, + "end": 1376 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1375, + "end": 1376 + }, + "ctxt": 0, + "value": "Y", + "optional": false + }, + "typeParams": null + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 1380, + "end": 1381 + }, + "value": 5.0, + "raw": "5" + } + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 1415, + "end": 1448 + }, + "expression": { + "type": "BinaryExpression", + "span": { + "start": 1415, + "end": 1447 + }, + "operator": "<", + "left": { + "type": "ParenthesisExpression", + "span": { + "start": 1415, + "end": 1443 + }, + "expression": { + "type": "TsAsExpression", + "span": { + "start": 1416, + "end": 1442 + }, + "expression": { + "type": "Identifier", + "span": { + "start": 1416, + "end": 1417 + }, + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsMappedType", + "span": { + "start": 1421, + "end": 1442 + }, + "readonly": null, + "typeParam": { + "type": "TsTypeParameter", + "span": { + "start": 1424, + "end": 1436 + }, + "name": { + "type": "Identifier", + "span": { + "start": 1424, + "end": 1425 + }, + "ctxt": 0, + "value": "K", + "optional": false + }, + "in": false, + "out": false, + "const": false, + "constraint": { + "type": "TsTypeOperator", + "span": { + "start": 1429, + "end": 1436 + }, + "op": "keyof", + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 1435, + "end": 1436 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1435, + "end": 1436 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + }, + "default": null + }, + "nameType": null, + "optional": null, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 1439, + "end": 1440 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1439, + "end": 1440 + }, + "ctxt": 0, + "value": "V", + "optional": false + }, + "typeParams": null + } + } + } + }, + "right": { + "type": "NumericLiteral", + "span": { + "start": 1446, + "end": 1447 + }, + "value": 5.0, + "raw": "5" + } + } + } + ], + "interpreter": null +} From 975d16574e197d9c099d3159feedf9867dfa499f Mon Sep 17 00:00:00 2001 From: Steffen Heil | secforge Date: Sun, 9 Nov 2025 14:38:32 +0100 Subject: [PATCH 2/4] test: update parser test cases for type assertions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Only test files were modified to verify the type assertion handling behavior. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../cast/primitive-vs-reference/input.ts | 81 +- .../cast/primitive-vs-reference/input.ts.json | 3111 +++++++---------- 2 files changed, 1329 insertions(+), 1863 deletions(-) diff --git a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts index 7b1f2dd61050..b83d369cf688 100644 --- a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts +++ b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts @@ -1,67 +1,58 @@ // Primitive keyword types - < should be comparison operator -(i as number) < 5; -(i as string) < "hello"; -(i as boolean) < true; -(i as any) < foo; -(i as void) < bar; -(i as undefined) < baz; -(i as null) < qux; -(i as never) < abc; -(i as unknown) < def; -(i as object) < ghi; -(i as symbol) < jkl; -(i as bigint) < 10n; - -// Reference types - < can start type parameters -(i as Number)(x); -(i as String)(x); -(i as Boolean)(x); -(i as Array)(x); -(i as MyType)(x); - -// as const - treated as primitive -(i as const) < 5; +i as number < 5; +i as string < "hello"; +i as boolean < true; +i as any < foo; +i as void < bar; +i as undefined < baz; +i as null < qux; +i as never < abc; +i as unknown < def; +i as object < ghi; +i as symbol < jkl; +i as bigint < 10n; // satisfies with primitive types -(i satisfies number) < 5; -(i satisfies string) < "test"; - -// satisfies with reference types -(i satisfies Number)(x); -(i satisfies MyType)(x); +i satisfies number < 5; +i satisfies string < "test"; // Literal types - should be treated as primitives -(i as 2) < 5; -(i as "x") < "y"; -(i as true) < false; -(i as 10n) < 20n; +i as 2 < 5; +i as "x" < "y"; +i as true < false; +i as 10n < 20n; // this type - non-callable -(i as this) < 5; +i as this < 5; + +// Array types +i as X[] < 5; -// Array types - non-callable (already complete) -(i as number[]) < 5; -(i as Array) < 5; +// Generic types +i as X < 5; // Tuple types - non-callable -(i as [number, string]) < 5; +i as [X, Y] < 5; // Union types - non-callable -(i as number | string) < 5; +i as A | string < 5; +i as A | B < 5; // Intersection types - non-callable -(i as A & B) < 5; +i as A & string < 5; +i as A & B < 5; // Type operators - non-callable -(i as keyof T) < 5; -(i as readonly number[]) < 5; -(i as unique symbol) < 5; +i as keyof T < 5; +i as readonly number[] < 5; +i as unique symbol < 5; // Indexed access types - non-callable -(i as T[K]) < 5; +i as T[K] < 5; // Conditional types - non-callable -(i as T extends U ? X : Y) < 5; +i as T extends U ? X : string < 5; +i as T extends U ? X : Y < 5; // Mapped types - non-callable -(i as { [K in keyof T]: V }) < 5; +i as { [K in keyof T]: V } < 5; diff --git a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json index 62fb94375fec..14dcb81d5ced 100644 --- a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json +++ b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json @@ -2,59 +2,52 @@ "type": "Script", "span": { "start": 62, - "end": 1448 + "end": 1127 }, "body": [ { "type": "ExpressionStatement", "span": { "start": 62, - "end": 80 + "end": 78 }, "expression": { "type": "BinaryExpression", "span": { "start": 62, - "end": 79 + "end": 77 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { "start": 62, - "end": 75 + "end": 73 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 63, - "end": 74 + "start": 62, + "end": 63 }, - "expression": { - "type": "Identifier", - "span": { - "start": 63, - "end": 64 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 67, + "end": 73 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 68, - "end": 74 - }, - "kind": "number" - } + "kind": "number" } }, "right": { "type": "NumericLiteral", "span": { - "start": 78, - "end": 79 + "start": 76, + "end": 77 }, "value": 5.0, "raw": "5" @@ -64,53 +57,46 @@ { "type": "ExpressionStatement", "span": { - "start": 81, - "end": 105 + "start": 79, + "end": 101 }, "expression": { "type": "BinaryExpression", "span": { - "start": 81, - "end": 104 + "start": 79, + "end": 100 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 81, - "end": 94 + "start": 79, + "end": 90 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 82, - "end": 93 + "start": 79, + "end": 80 }, - "expression": { - "type": "Identifier", - "span": { - "start": 82, - "end": 83 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 84, + "end": 90 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 87, - "end": 93 - }, - "kind": "string" - } + "kind": "string" } }, "right": { "type": "StringLiteral", "span": { - "start": 97, - "end": 104 + "start": 93, + "end": 100 }, "value": "hello", "raw": "\"hello\"" @@ -120,53 +106,46 @@ { "type": "ExpressionStatement", "span": { - "start": 106, - "end": 128 + "start": 102, + "end": 122 }, "expression": { "type": "BinaryExpression", "span": { - "start": 106, - "end": 127 + "start": 102, + "end": 121 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 106, - "end": 120 + "start": 102, + "end": 114 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 107, - "end": 119 + "start": 102, + "end": 103 }, - "expression": { - "type": "Identifier", - "span": { - "start": 107, - "end": 108 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 107, + "end": 114 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 112, - "end": 119 - }, - "kind": "boolean" - } + "kind": "boolean" } }, "right": { "type": "BooleanLiteral", "span": { - "start": 123, - "end": 127 + "start": 117, + "end": 121 }, "value": true } @@ -175,53 +154,46 @@ { "type": "ExpressionStatement", "span": { - "start": 129, - "end": 146 + "start": 123, + "end": 138 }, "expression": { "type": "BinaryExpression", "span": { - "start": 129, - "end": 145 + "start": 123, + "end": 137 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 129, - "end": 139 + "start": 123, + "end": 131 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 130, - "end": 138 + "start": 123, + "end": 124 }, - "expression": { - "type": "Identifier", - "span": { - "start": 130, - "end": 131 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 128, + "end": 131 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 135, - "end": 138 - }, - "kind": "any" - } + "kind": "any" } }, "right": { "type": "Identifier", "span": { - "start": 142, - "end": 145 + "start": 134, + "end": 137 }, "ctxt": 0, "value": "foo", @@ -232,53 +204,46 @@ { "type": "ExpressionStatement", "span": { - "start": 147, - "end": 165 + "start": 139, + "end": 155 }, "expression": { "type": "BinaryExpression", "span": { - "start": 147, - "end": 164 + "start": 139, + "end": 154 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 147, - "end": 158 + "start": 139, + "end": 148 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 148, - "end": 157 + "start": 139, + "end": 140 }, - "expression": { - "type": "Identifier", - "span": { - "start": 148, - "end": 149 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 144, + "end": 148 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 153, - "end": 157 - }, - "kind": "void" - } + "kind": "void" } }, "right": { "type": "Identifier", "span": { - "start": 161, - "end": 164 + "start": 151, + "end": 154 }, "ctxt": 0, "value": "bar", @@ -289,53 +254,46 @@ { "type": "ExpressionStatement", "span": { - "start": 166, - "end": 189 + "start": 156, + "end": 177 }, "expression": { "type": "BinaryExpression", "span": { - "start": 166, - "end": 188 + "start": 156, + "end": 176 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 166, - "end": 182 + "start": 156, + "end": 170 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 167, - "end": 181 + "start": 156, + "end": 157 }, - "expression": { - "type": "Identifier", - "span": { - "start": 167, - "end": 168 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 161, + "end": 170 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 172, - "end": 181 - }, - "kind": "undefined" - } + "kind": "undefined" } }, "right": { "type": "Identifier", "span": { - "start": 185, - "end": 188 + "start": 173, + "end": 176 }, "ctxt": 0, "value": "baz", @@ -346,53 +304,46 @@ { "type": "ExpressionStatement", "span": { - "start": 190, - "end": 208 + "start": 178, + "end": 194 }, "expression": { "type": "BinaryExpression", "span": { - "start": 190, - "end": 207 + "start": 178, + "end": 193 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 190, - "end": 201 + "start": 178, + "end": 187 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 191, - "end": 200 + "start": 178, + "end": 179 }, - "expression": { - "type": "Identifier", - "span": { - "start": 191, - "end": 192 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 183, + "end": 187 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 196, - "end": 200 - }, - "kind": "null" - } + "kind": "null" } }, "right": { "type": "Identifier", "span": { - "start": 204, - "end": 207 + "start": 190, + "end": 193 }, "ctxt": 0, "value": "qux", @@ -403,53 +354,46 @@ { "type": "ExpressionStatement", "span": { - "start": 209, - "end": 228 + "start": 195, + "end": 212 }, "expression": { "type": "BinaryExpression", "span": { - "start": 209, - "end": 227 + "start": 195, + "end": 211 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 209, - "end": 221 + "start": 195, + "end": 205 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 210, - "end": 220 + "start": 195, + "end": 196 }, - "expression": { - "type": "Identifier", - "span": { - "start": 210, - "end": 211 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 200, + "end": 205 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 215, - "end": 220 - }, - "kind": "never" - } + "kind": "never" } }, "right": { "type": "Identifier", "span": { - "start": 224, - "end": 227 + "start": 208, + "end": 211 }, "ctxt": 0, "value": "abc", @@ -460,53 +404,46 @@ { "type": "ExpressionStatement", "span": { - "start": 229, - "end": 250 + "start": 213, + "end": 232 }, "expression": { "type": "BinaryExpression", "span": { - "start": 229, - "end": 249 + "start": 213, + "end": 231 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 229, - "end": 243 + "start": 213, + "end": 225 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 230, - "end": 242 + "start": 213, + "end": 214 }, - "expression": { - "type": "Identifier", - "span": { - "start": 230, - "end": 231 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 218, + "end": 225 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 235, - "end": 242 - }, - "kind": "unknown" - } + "kind": "unknown" } }, "right": { "type": "Identifier", "span": { - "start": 246, - "end": 249 + "start": 228, + "end": 231 }, "ctxt": 0, "value": "def", @@ -517,53 +454,46 @@ { "type": "ExpressionStatement", "span": { - "start": 251, - "end": 271 + "start": 233, + "end": 251 }, "expression": { "type": "BinaryExpression", "span": { - "start": 251, - "end": 270 + "start": 233, + "end": 250 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 251, - "end": 264 + "start": 233, + "end": 244 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 252, - "end": 263 + "start": 233, + "end": 234 }, - "expression": { - "type": "Identifier", - "span": { - "start": 252, - "end": 253 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 238, + "end": 244 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 257, - "end": 263 - }, - "kind": "object" - } + "kind": "object" } }, "right": { "type": "Identifier", "span": { - "start": 267, - "end": 270 + "start": 247, + "end": 250 }, "ctxt": 0, "value": "ghi", @@ -574,53 +504,46 @@ { "type": "ExpressionStatement", "span": { - "start": 272, - "end": 292 + "start": 252, + "end": 270 }, "expression": { "type": "BinaryExpression", "span": { - "start": 272, - "end": 291 + "start": 252, + "end": 269 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 272, - "end": 285 + "start": 252, + "end": 263 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 273, - "end": 284 + "start": 252, + "end": 253 }, - "expression": { - "type": "Identifier", - "span": { - "start": 273, - "end": 274 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 257, + "end": 263 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 278, - "end": 284 - }, - "kind": "symbol" - } + "kind": "symbol" } }, "right": { "type": "Identifier", "span": { - "start": 288, - "end": 291 + "start": 266, + "end": 269 }, "ctxt": 0, "value": "jkl", @@ -631,53 +554,46 @@ { "type": "ExpressionStatement", "span": { - "start": 293, - "end": 313 + "start": 271, + "end": 289 }, "expression": { "type": "BinaryExpression", "span": { - "start": 293, - "end": 312 + "start": 271, + "end": 288 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 293, - "end": 306 + "start": 271, + "end": 282 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 294, - "end": 305 + "start": 271, + "end": 272 }, - "expression": { - "type": "Identifier", - "span": { - "start": 294, - "end": 295 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 276, + "end": 282 }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 299, - "end": 305 - }, - "kind": "bigint" - } + "kind": "bigint" } }, "right": { "type": "BigIntLiteral", "span": { - "start": 309, - "end": 312 + "start": 285, + "end": 288 }, "value": [ 1, @@ -692,914 +608,445 @@ { "type": "ExpressionStatement", "span": { - "start": 364, - "end": 384 + "start": 325, + "end": 348 }, "expression": { - "type": "CallExpression", + "type": "BinaryExpression", "span": { - "start": 364, - "end": 383 + "start": 325, + "end": 347 }, - "ctxt": 0, - "callee": { - "type": "ParenthesisExpression", + "operator": "<", + "left": { + "type": "TsSatisfiesExpression", "span": { - "start": 364, - "end": 377 + "start": 325, + "end": 343 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 365, - "end": 376 + "start": 325, + "end": 326 }, - "expression": { - "type": "Identifier", - "span": { - "start": 365, - "end": 366 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 337, + "end": 343 }, - "typeAnnotation": { - "type": "TsTypeReference", - "span": { - "start": 370, - "end": 376 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 370, - "end": 376 - }, - "ctxt": 0, - "value": "Number", - "optional": false - }, - "typeParams": null - } + "kind": "number" } }, - "arguments": [ - { - "spread": null, - "expression": { - "type": "Identifier", - "span": { - "start": 381, - "end": 382 - }, - "ctxt": 0, - "value": "x", - "optional": false - } - } - ], - "typeArguments": { - "type": "TsTypeParameterInstantiation", + "right": { + "type": "NumericLiteral", "span": { - "start": 377, - "end": 380 + "start": 346, + "end": 347 }, - "params": [ - { - "type": "TsTypeReference", - "span": { - "start": 378, - "end": 379 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 378, - "end": 379 - }, - "ctxt": 0, - "value": "T", - "optional": false - }, - "typeParams": null - } - ] + "value": 5.0, + "raw": "5" } } }, { "type": "ExpressionStatement", "span": { - "start": 385, - "end": 405 + "start": 349, + "end": 377 }, "expression": { - "type": "CallExpression", + "type": "BinaryExpression", "span": { - "start": 385, - "end": 404 + "start": 349, + "end": 376 }, - "ctxt": 0, - "callee": { - "type": "ParenthesisExpression", + "operator": "<", + "left": { + "type": "TsSatisfiesExpression", "span": { - "start": 385, - "end": 398 + "start": 349, + "end": 367 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 386, - "end": 397 + "start": 349, + "end": 350 }, - "expression": { - "type": "Identifier", - "span": { - "start": 386, - "end": 387 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsKeywordType", + "span": { + "start": 361, + "end": 367 }, - "typeAnnotation": { - "type": "TsTypeReference", - "span": { - "start": 391, - "end": 397 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 391, - "end": 397 - }, - "ctxt": 0, - "value": "String", - "optional": false - }, - "typeParams": null - } + "kind": "string" } }, - "arguments": [ - { - "spread": null, - "expression": { - "type": "Identifier", - "span": { - "start": 402, - "end": 403 - }, - "ctxt": 0, - "value": "x", - "optional": false - } - } - ], - "typeArguments": { - "type": "TsTypeParameterInstantiation", + "right": { + "type": "StringLiteral", "span": { - "start": 398, - "end": 401 + "start": 370, + "end": 376 }, - "params": [ - { - "type": "TsTypeReference", - "span": { - "start": 399, - "end": 400 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 399, - "end": 400 - }, - "ctxt": 0, - "value": "T", - "optional": false - }, - "typeParams": null - } - ] + "value": "test", + "raw": "\"test\"" } } }, { "type": "ExpressionStatement", "span": { - "start": 406, - "end": 427 + "start": 430, + "end": 441 }, "expression": { - "type": "CallExpression", + "type": "BinaryExpression", "span": { - "start": 406, - "end": 426 + "start": 430, + "end": 440 }, - "ctxt": 0, - "callee": { - "type": "ParenthesisExpression", - "span": { - "start": 406, - "end": 420 + "operator": "<", + "left": { + "type": "TsAsExpression", + "span": { + "start": 430, + "end": 436 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 407, - "end": 419 + "start": 430, + "end": 431 }, - "expression": { - "type": "Identifier", - "span": { - "start": 407, - "end": 408 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsLiteralType", + "span": { + "start": 435, + "end": 436 }, - "typeAnnotation": { - "type": "TsTypeReference", + "literal": { + "type": "NumericLiteral", "span": { - "start": 412, - "end": 419 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 412, - "end": 419 - }, - "ctxt": 0, - "value": "Boolean", - "optional": false + "start": 435, + "end": 436 }, - "typeParams": null + "value": 2.0, + "raw": "2" } } }, - "arguments": [ - { - "spread": null, - "expression": { - "type": "Identifier", - "span": { - "start": 424, - "end": 425 - }, - "ctxt": 0, - "value": "x", - "optional": false - } - } - ], - "typeArguments": { - "type": "TsTypeParameterInstantiation", + "right": { + "type": "NumericLiteral", "span": { - "start": 420, - "end": 423 + "start": 439, + "end": 440 }, - "params": [ - { - "type": "TsTypeReference", - "span": { - "start": 421, - "end": 422 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 421, - "end": 422 - }, - "ctxt": 0, - "value": "T", - "optional": false - }, - "typeParams": null - } - ] + "value": 5.0, + "raw": "5" } } }, { "type": "ExpressionStatement", "span": { - "start": 428, - "end": 447 + "start": 442, + "end": 457 }, "expression": { - "type": "CallExpression", + "type": "BinaryExpression", "span": { - "start": 428, - "end": 446 + "start": 442, + "end": 456 }, - "ctxt": 0, - "callee": { - "type": "ParenthesisExpression", + "operator": "<", + "left": { + "type": "TsAsExpression", "span": { - "start": 428, - "end": 440 + "start": 442, + "end": 450 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 429, - "end": 439 + "start": 442, + "end": 443 }, - "expression": { - "type": "Identifier", - "span": { - "start": 429, - "end": 430 - }, - "ctxt": 0, - "value": "i", - "optional": false - }, - "typeAnnotation": { - "type": "TsTypeReference", - "span": { - "start": 434, - "end": 439 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 434, - "end": 439 - }, - "ctxt": 0, - "value": "Array", - "optional": false - }, - "typeParams": null - } - } - }, - "arguments": [ - { - "spread": null, - "expression": { - "type": "Identifier", - "span": { - "start": 444, - "end": 445 - }, - "ctxt": 0, - "value": "x", - "optional": false - } - } - ], - "typeArguments": { - "type": "TsTypeParameterInstantiation", - "span": { - "start": 440, - "end": 443 - }, - "params": [ - { - "type": "TsTypeReference", - "span": { - "start": 441, - "end": 442 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 441, - "end": 442 - }, - "ctxt": 0, - "value": "T", - "optional": false - }, - "typeParams": null - } - ] - } - } - }, - { - "type": "ExpressionStatement", - "span": { - "start": 448, - "end": 468 - }, - "expression": { - "type": "CallExpression", - "span": { - "start": 448, - "end": 467 - }, - "ctxt": 0, - "callee": { - "type": "ParenthesisExpression", - "span": { - "start": 448, - "end": 461 + "ctxt": 0, + "value": "i", + "optional": false }, - "expression": { - "type": "TsAsExpression", + "typeAnnotation": { + "type": "TsLiteralType", "span": { - "start": 449, - "end": 460 + "start": 447, + "end": 450 }, - "expression": { - "type": "Identifier", + "literal": { + "type": "StringLiteral", "span": { - "start": 449, + "start": 447, "end": 450 }, - "ctxt": 0, - "value": "i", - "optional": false - }, - "typeAnnotation": { - "type": "TsTypeReference", - "span": { - "start": 454, - "end": 460 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 454, - "end": 460 - }, - "ctxt": 0, - "value": "MyType", - "optional": false - }, - "typeParams": null - } - } - }, - "arguments": [ - { - "spread": null, - "expression": { - "type": "Identifier", - "span": { - "start": 465, - "end": 466 - }, - "ctxt": 0, "value": "x", - "optional": false + "raw": "\"x\"" } } - ], - "typeArguments": { - "type": "TsTypeParameterInstantiation", + }, + "right": { + "type": "StringLiteral", "span": { - "start": 461, - "end": 464 + "start": 453, + "end": 456 }, - "params": [ - { - "type": "TsTypeReference", - "span": { - "start": 462, - "end": 463 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 462, - "end": 463 - }, - "ctxt": 0, - "value": "T", - "optional": false - }, - "typeParams": null - } - ] + "value": "y", + "raw": "\"y\"" } } }, { "type": "ExpressionStatement", "span": { - "start": 505, - "end": 522 + "start": 458, + "end": 476 }, "expression": { "type": "BinaryExpression", "span": { - "start": 505, - "end": 521 + "start": 458, + "end": 475 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 505, - "end": 517 + "start": 458, + "end": 467 }, "expression": { - "type": "TsConstAssertion", + "type": "Identifier", "span": { - "start": 506, - "end": 516 + "start": 458, + "end": 459 }, - "expression": { - "type": "Identifier", + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsLiteralType", + "span": { + "start": 463, + "end": 467 + }, + "literal": { + "type": "BooleanLiteral", "span": { - "start": 506, - "end": 507 + "start": 463, + "end": 467 }, - "ctxt": 0, - "value": "i", - "optional": false + "value": true } } }, "right": { - "type": "NumericLiteral", + "type": "BooleanLiteral", "span": { - "start": 520, - "end": 521 + "start": 470, + "end": 475 }, - "value": 5.0, - "raw": "5" + "value": false } } }, { "type": "ExpressionStatement", "span": { - "start": 558, - "end": 583 + "start": 477, + "end": 492 }, "expression": { "type": "BinaryExpression", "span": { - "start": 558, - "end": 582 + "start": 477, + "end": 491 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 558, - "end": 578 + "start": 477, + "end": 485 }, "expression": { - "type": "TsSatisfiesExpression", + "type": "Identifier", "span": { - "start": 559, - "end": 577 + "start": 477, + "end": 478 }, - "expression": { - "type": "Identifier", - "span": { - "start": 559, - "end": 560 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsLiteralType", + "span": { + "start": 482, + "end": 485 }, - "typeAnnotation": { - "type": "TsKeywordType", + "literal": { + "type": "BigIntLiteral", "span": { - "start": 571, - "end": 577 + "start": 482, + "end": 485 }, - "kind": "number" + "value": [ + 1, + [ + 10 + ] + ], + "raw": "10n" } } }, "right": { - "type": "NumericLiteral", + "type": "BigIntLiteral", "span": { - "start": 581, - "end": 582 + "start": 488, + "end": 491 }, - "value": 5.0, - "raw": "5" + "value": [ + 1, + [ + 20 + ] + ], + "raw": "20n" } } }, { "type": "ExpressionStatement", "span": { - "start": 584, - "end": 614 + "start": 522, + "end": 536 }, "expression": { "type": "BinaryExpression", "span": { - "start": 584, - "end": 613 + "start": 522, + "end": 535 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 584, - "end": 604 + "start": 522, + "end": 531 }, "expression": { - "type": "TsSatisfiesExpression", + "type": "Identifier", "span": { - "start": 585, - "end": 603 + "start": 522, + "end": 523 }, - "expression": { - "type": "Identifier", - "span": { - "start": 585, - "end": 586 - }, - "ctxt": 0, - "value": "i", - "optional": false - }, - "typeAnnotation": { - "type": "TsKeywordType", - "span": { - "start": 597, - "end": 603 - }, - "kind": "string" + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsThisType", + "span": { + "start": 527, + "end": 531 } } }, "right": { - "type": "StringLiteral", + "type": "NumericLiteral", "span": { - "start": 607, - "end": 613 + "start": 534, + "end": 535 }, - "value": "test", - "raw": "\"test\"" + "value": 5.0, + "raw": "5" } } }, { "type": "ExpressionStatement", "span": { - "start": 650, - "end": 677 + "start": 553, + "end": 566 }, "expression": { - "type": "CallExpression", + "type": "BinaryExpression", "span": { - "start": 650, - "end": 676 + "start": 553, + "end": 565 }, - "ctxt": 0, - "callee": { - "type": "ParenthesisExpression", + "operator": "<", + "left": { + "type": "TsAsExpression", "span": { - "start": 650, - "end": 670 + "start": 553, + "end": 561 }, "expression": { - "type": "TsSatisfiesExpression", + "type": "Identifier", "span": { - "start": 651, - "end": 669 + "start": 553, + "end": 554 }, - "expression": { - "type": "Identifier", - "span": { - "start": 651, - "end": 652 - }, - "ctxt": 0, - "value": "i", - "optional": false - }, - "typeAnnotation": { - "type": "TsTypeReference", - "span": { - "start": 663, - "end": 669 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 663, - "end": 669 - }, - "ctxt": 0, - "value": "Number", - "optional": false - }, - "typeParams": null - } - } - }, - "arguments": [ - { - "spread": null, - "expression": { - "type": "Identifier", - "span": { - "start": 674, - "end": 675 - }, - "ctxt": 0, - "value": "x", - "optional": false - } - } - ], - "typeArguments": { - "type": "TsTypeParameterInstantiation", - "span": { - "start": 670, - "end": 673 + "ctxt": 0, + "value": "i", + "optional": false }, - "params": [ - { - "type": "TsTypeReference", - "span": { - "start": 671, - "end": 672 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 671, - "end": 672 - }, - "ctxt": 0, - "value": "T", - "optional": false - }, - "typeParams": null - } - ] - } - } - }, - { - "type": "ExpressionStatement", - "span": { - "start": 678, - "end": 705 - }, - "expression": { - "type": "CallExpression", - "span": { - "start": 678, - "end": 704 - }, - "ctxt": 0, - "callee": { - "type": "ParenthesisExpression", - "span": { - "start": 678, - "end": 698 - }, - "expression": { - "type": "TsSatisfiesExpression", + "typeAnnotation": { + "type": "TsArrayType", "span": { - "start": 679, - "end": 697 - }, - "expression": { - "type": "Identifier", - "span": { - "start": 679, - "end": 680 - }, - "ctxt": 0, - "value": "i", - "optional": false + "start": 558, + "end": 561 }, - "typeAnnotation": { + "elemType": { "type": "TsTypeReference", "span": { - "start": 691, - "end": 697 + "start": 558, + "end": 559 }, "typeName": { "type": "Identifier", "span": { - "start": 691, - "end": 697 + "start": 558, + "end": 559 }, "ctxt": 0, - "value": "MyType", + "value": "X", "optional": false }, "typeParams": null } } }, - "arguments": [ - { - "spread": null, - "expression": { - "type": "Identifier", - "span": { - "start": 702, - "end": 703 - }, - "ctxt": 0, - "value": "x", - "optional": false - } - } - ], - "typeArguments": { - "type": "TsTypeParameterInstantiation", - "span": { - "start": 698, - "end": 701 - }, - "params": [ - { - "type": "TsTypeReference", - "span": { - "start": 699, - "end": 700 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 699, - "end": 700 - }, - "ctxt": 0, - "value": "T", - "optional": false - }, - "typeParams": null - } - ] - } - } - }, - { - "type": "ExpressionStatement", - "span": { - "start": 758, - "end": 771 - }, - "expression": { - "type": "BinaryExpression", - "span": { - "start": 758, - "end": 770 - }, - "operator": "<", - "left": { - "type": "ParenthesisExpression", - "span": { - "start": 758, - "end": 766 - }, - "expression": { - "type": "TsAsExpression", - "span": { - "start": 759, - "end": 765 - }, - "expression": { - "type": "Identifier", - "span": { - "start": 759, - "end": 760 - }, - "ctxt": 0, - "value": "i", - "optional": false - }, - "typeAnnotation": { - "type": "TsLiteralType", - "span": { - "start": 764, - "end": 765 - }, - "literal": { - "type": "NumericLiteral", - "span": { - "start": 764, - "end": 765 - }, - "value": 2.0, - "raw": "2" - } - } - } - }, "right": { "type": "NumericLiteral", "span": { - "start": 769, - "end": 770 + "start": 564, + "end": 565 }, "value": 5.0, "raw": "5" @@ -1609,252 +1056,184 @@ { "type": "ExpressionStatement", "span": { - "start": 772, - "end": 789 + "start": 585, + "end": 599 }, "expression": { "type": "BinaryExpression", "span": { - "start": 772, - "end": 788 + "start": 585, + "end": 598 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 772, - "end": 782 + "start": 585, + "end": 594 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 773, - "end": 781 - }, - "expression": { - "type": "Identifier", - "span": { - "start": 773, - "end": 774 - }, - "ctxt": 0, - "value": "i", - "optional": false + "start": 585, + "end": 586 }, - "typeAnnotation": { - "type": "TsLiteralType", - "span": { - "start": 778, - "end": 781 - }, - "literal": { - "type": "StringLiteral", - "span": { - "start": 778, - "end": 781 - }, - "value": "x", - "raw": "\"x\"" - } - } - } - }, - "right": { - "type": "StringLiteral", - "span": { - "start": 785, - "end": 788 - }, - "value": "y", - "raw": "\"y\"" - } - } - }, - { - "type": "ExpressionStatement", - "span": { - "start": 790, - "end": 810 - }, - "expression": { - "type": "BinaryExpression", - "span": { - "start": 790, - "end": 809 - }, - "operator": "<", - "left": { - "type": "ParenthesisExpression", - "span": { - "start": 790, - "end": 801 + "ctxt": 0, + "value": "i", + "optional": false }, - "expression": { - "type": "TsAsExpression", + "typeAnnotation": { + "type": "TsTypeReference", "span": { - "start": 791, - "end": 800 + "start": 590, + "end": 594 }, - "expression": { + "typeName": { "type": "Identifier", "span": { - "start": 791, - "end": 792 + "start": 590, + "end": 591 }, "ctxt": 0, - "value": "i", + "value": "X", "optional": false }, - "typeAnnotation": { - "type": "TsLiteralType", + "typeParams": { + "type": "TsTypeParameterInstantiation", "span": { - "start": 796, - "end": 800 + "start": 591, + "end": 594 }, - "literal": { - "type": "BooleanLiteral", - "span": { - "start": 796, - "end": 800 - }, - "value": true - } + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 592, + "end": 593 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 592, + "end": 593 + }, + "ctxt": 0, + "value": "Y", + "optional": false + }, + "typeParams": null + } + ] } } }, "right": { - "type": "BooleanLiteral", + "type": "NumericLiteral", "span": { - "start": 804, - "end": 809 + "start": 597, + "end": 598 }, - "value": false + "value": 5.0, + "raw": "5" } } }, { "type": "ExpressionStatement", "span": { - "start": 811, - "end": 828 + "start": 631, + "end": 647 }, "expression": { "type": "BinaryExpression", "span": { - "start": 811, - "end": 827 + "start": 631, + "end": 646 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 811, - "end": 821 + "start": 631, + "end": 642 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 812, - "end": 820 - }, - "expression": { - "type": "Identifier", - "span": { - "start": 812, - "end": 813 - }, - "ctxt": 0, - "value": "i", - "optional": false + "start": 631, + "end": 632 }, - "typeAnnotation": { - "type": "TsLiteralType", - "span": { - "start": 817, - "end": 820 - }, - "literal": { - "type": "BigIntLiteral", - "span": { - "start": 817, - "end": 820 - }, - "value": [ - 1, - [ - 10 - ] - ], - "raw": "10n" - } - } - } - }, - "right": { - "type": "BigIntLiteral", - "span": { - "start": 824, - "end": 827 - }, - "value": [ - 1, - [ - 20 - ] - ], - "raw": "20n" - } - } - }, - { - "type": "ExpressionStatement", - "span": { - "start": 858, - "end": 874 - }, - "expression": { - "type": "BinaryExpression", - "span": { - "start": 858, - "end": 873 - }, - "operator": "<", - "left": { - "type": "ParenthesisExpression", - "span": { - "start": 858, - "end": 869 + "ctxt": 0, + "value": "i", + "optional": false }, - "expression": { - "type": "TsAsExpression", + "typeAnnotation": { + "type": "TsTupleType", "span": { - "start": 859, - "end": 868 + "start": 636, + "end": 642 }, - "expression": { - "type": "Identifier", - "span": { - "start": 859, - "end": 860 + "elemTypes": [ + { + "type": "TsTupleElement", + "span": { + "start": 637, + "end": 638 + }, + "label": null, + "ty": { + "type": "TsTypeReference", + "span": { + "start": 637, + "end": 638 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 637, + "end": 638 + }, + "ctxt": 0, + "value": "X", + "optional": false + }, + "typeParams": null + } }, - "ctxt": 0, - "value": "i", - "optional": false - }, - "typeAnnotation": { - "type": "TsThisType", - "span": { - "start": 864, - "end": 868 + { + "type": "TsTupleElement", + "span": { + "start": 640, + "end": 641 + }, + "label": null, + "ty": { + "type": "TsTypeReference", + "span": { + "start": 640, + "end": 641 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 640, + "end": 641 + }, + "ctxt": 0, + "value": "Y", + "optional": false + }, + "typeParams": null + } } - } + ] } }, "right": { "type": "NumericLiteral", "span": { - "start": 872, - "end": 873 + "start": 645, + "end": 646 }, "value": 5.0, "raw": "5" @@ -1864,60 +1243,73 @@ { "type": "ExpressionStatement", "span": { - "start": 925, - "end": 945 + "start": 679, + "end": 699 }, "expression": { "type": "BinaryExpression", "span": { - "start": 925, - "end": 944 + "start": 679, + "end": 698 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 925, - "end": 940 + "start": 679, + "end": 694 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 926, - "end": 939 + "start": 679, + "end": 680 }, - "expression": { - "type": "Identifier", - "span": { - "start": 926, - "end": 927 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsUnionType", + "span": { + "start": 684, + "end": 694 }, - "typeAnnotation": { - "type": "TsArrayType", - "span": { - "start": 931, - "end": 939 + "types": [ + { + "type": "TsTypeReference", + "span": { + "start": 684, + "end": 685 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 684, + "end": 685 + }, + "ctxt": 0, + "value": "A", + "optional": false + }, + "typeParams": null }, - "elemType": { + { "type": "TsKeywordType", "span": { - "start": 931, - "end": 937 + "start": 688, + "end": 694 }, - "kind": "number" + "kind": "string" } - } + ] } }, "right": { "type": "NumericLiteral", "span": { - "start": 943, - "end": 944 + "start": 697, + "end": 698 }, "value": 5.0, "raw": "5" @@ -1927,79 +1319,109 @@ { "type": "ExpressionStatement", "span": { - "start": 946, - "end": 971 + "start": 700, + "end": 718 }, "expression": { "type": "BinaryExpression", "span": { - "start": 946, - "end": 970 + "start": 700, + "end": 717 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 946, - "end": 966 + "start": 700, + "end": 713 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 947, - "end": 965 + "start": 700, + "end": 701 }, - "expression": { - "type": "Identifier", - "span": { - "start": 947, - "end": 948 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsUnionType", + "span": { + "start": 705, + "end": 713 }, - "typeAnnotation": { - "type": "TsTypeReference", - "span": { - "start": 952, - "end": 965 - }, - "typeName": { - "type": "Identifier", + "types": [ + { + "type": "TsTypeReference", "span": { - "start": 952, - "end": 957 + "start": 705, + "end": 706 }, - "ctxt": 0, - "value": "Array", - "optional": false + "typeName": { + "type": "Identifier", + "span": { + "start": 705, + "end": 706 + }, + "ctxt": 0, + "value": "A", + "optional": false + }, + "typeParams": null }, - "typeParams": { - "type": "TsTypeParameterInstantiation", + { + "type": "TsTypeReference", "span": { - "start": 957, - "end": 965 + "start": 709, + "end": 713 }, - "params": [ - { - "type": "TsKeywordType", - "span": { - "start": 958, - "end": 964 - }, - "kind": "number" - } - ] + "typeName": { + "type": "Identifier", + "span": { + "start": 709, + "end": 710 + }, + "ctxt": 0, + "value": "B", + "optional": false + }, + "typeParams": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 710, + "end": 713 + }, + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 711, + "end": 712 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 711, + "end": 712 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] + } } - } + ] } }, "right": { "type": "NumericLiteral", "span": { - "start": 969, - "end": 970 + "start": 716, + "end": 717 }, "value": 5.0, "raw": "5" @@ -2009,86 +1431,73 @@ { "type": "ExpressionStatement", "span": { - "start": 1003, - "end": 1031 + "start": 757, + "end": 777 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1003, - "end": 1030 + "start": 757, + "end": 776 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 1003, - "end": 1026 + "start": 757, + "end": 772 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 1004, - "end": 1025 + "start": 757, + "end": 758 }, - "expression": { - "type": "Identifier", - "span": { - "start": 1004, - "end": 1005 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsIntersectionType", + "span": { + "start": 762, + "end": 772 }, - "typeAnnotation": { - "type": "TsTupleType", - "span": { - "start": 1009, - "end": 1025 - }, - "elemTypes": [ - { - "type": "TsTupleElement", - "span": { - "start": 1010, - "end": 1016 - }, - "label": null, - "ty": { - "type": "TsKeywordType", - "span": { - "start": 1010, - "end": 1016 - }, - "kind": "number" - } + "types": [ + { + "type": "TsTypeReference", + "span": { + "start": 762, + "end": 763 }, - { - "type": "TsTupleElement", + "typeName": { + "type": "Identifier", "span": { - "start": 1018, - "end": 1024 + "start": 762, + "end": 763 }, - "label": null, - "ty": { - "type": "TsKeywordType", - "span": { - "start": 1018, - "end": 1024 - }, - "kind": "string" - } - } - ] - } + "ctxt": 0, + "value": "A", + "optional": false + }, + "typeParams": null + }, + { + "type": "TsKeywordType", + "span": { + "start": 766, + "end": 772 + }, + "kind": "string" + } + ] } }, "right": { "type": "NumericLiteral", "span": { - "start": 1029, - "end": 1030 + "start": 775, + "end": 776 }, "value": 5.0, "raw": "5" @@ -2098,70 +1507,109 @@ { "type": "ExpressionStatement", "span": { - "start": 1063, - "end": 1090 + "start": 778, + "end": 796 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1063, - "end": 1089 + "start": 778, + "end": 795 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 1063, - "end": 1085 + "start": 778, + "end": 791 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 1064, - "end": 1084 + "start": 778, + "end": 779 }, - "expression": { - "type": "Identifier", - "span": { - "start": 1064, - "end": 1065 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsIntersectionType", + "span": { + "start": 783, + "end": 791 }, - "typeAnnotation": { - "type": "TsUnionType", - "span": { - "start": 1069, - "end": 1084 + "types": [ + { + "type": "TsTypeReference", + "span": { + "start": 783, + "end": 784 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 783, + "end": 784 + }, + "ctxt": 0, + "value": "A", + "optional": false + }, + "typeParams": null }, - "types": [ - { - "type": "TsKeywordType", + { + "type": "TsTypeReference", + "span": { + "start": 787, + "end": 791 + }, + "typeName": { + "type": "Identifier", "span": { - "start": 1069, - "end": 1075 + "start": 787, + "end": 788 }, - "kind": "number" + "ctxt": 0, + "value": "B", + "optional": false }, - { - "type": "TsKeywordType", + "typeParams": { + "type": "TsTypeParameterInstantiation", "span": { - "start": 1078, - "end": 1084 + "start": 788, + "end": 791 }, - "kind": "string" + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 789, + "end": 790 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 789, + "end": 790 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] } - ] - } + } + ] } }, "right": { "type": "NumericLiteral", "span": { - "start": 1088, - "end": 1089 + "start": 794, + "end": 795 }, "value": 5.0, "raw": "5" @@ -2171,90 +1619,90 @@ { "type": "ExpressionStatement", "span": { - "start": 1129, - "end": 1146 + "start": 831, + "end": 851 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1129, - "end": 1145 + "start": 831, + "end": 850 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 1129, - "end": 1141 + "start": 831, + "end": 846 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 1130, - "end": 1140 + "start": 831, + "end": 832 }, - "expression": { - "type": "Identifier", - "span": { - "start": 1130, - "end": 1131 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeOperator", + "span": { + "start": 836, + "end": 846 }, + "op": "keyof", "typeAnnotation": { - "type": "TsIntersectionType", + "type": "TsTypeReference", "span": { - "start": 1135, - "end": 1140 + "start": 842, + "end": 846 }, - "types": [ - { - "type": "TsTypeReference", - "span": { - "start": 1135, - "end": 1136 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1135, - "end": 1136 - }, - "ctxt": 0, - "value": "A", - "optional": false - }, - "typeParams": null + "typeName": { + "type": "Identifier", + "span": { + "start": 842, + "end": 843 }, - { - "type": "TsTypeReference", - "span": { - "start": 1139, - "end": 1140 - }, - "typeName": { - "type": "Identifier", + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": { + "type": "TsTypeParameterInstantiation", + "span": { + "start": 843, + "end": 846 + }, + "params": [ + { + "type": "TsTypeReference", "span": { - "start": 1139, - "end": 1140 + "start": 844, + "end": 845 }, - "ctxt": 0, - "value": "B", - "optional": false - }, - "typeParams": null - } - ] + "typeName": { + "type": "Identifier", + "span": { + "start": 844, + "end": 845 + }, + "ctxt": 0, + "value": "U", + "optional": false + }, + "typeParams": null + } + ] + } } } }, "right": { "type": "NumericLiteral", "span": { - "start": 1144, - "end": 1145 + "start": 849, + "end": 850 }, "value": 5.0, "raw": "5" @@ -2264,62 +1712,52 @@ { "type": "ExpressionStatement", "span": { - "start": 1181, - "end": 1200 + "start": 852, + "end": 879 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1181, - "end": 1199 + "start": 852, + "end": 878 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 1181, - "end": 1195 + "start": 852, + "end": 874 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 1182, - "end": 1194 + "start": 852, + "end": 853 }, - "expression": { - "type": "Identifier", - "span": { - "start": 1182, - "end": 1183 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeOperator", + "span": { + "start": 857, + "end": 874 }, + "op": "readonly", "typeAnnotation": { - "type": "TsTypeOperator", + "type": "TsArrayType", "span": { - "start": 1187, - "end": 1194 + "start": 866, + "end": 874 }, - "op": "keyof", - "typeAnnotation": { - "type": "TsTypeReference", - "span": { - "start": 1193, - "end": 1194 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1193, - "end": 1194 - }, - "ctxt": 0, - "value": "T", - "optional": false + "elemType": { + "type": "TsKeywordType", + "span": { + "start": 866, + "end": 872 }, - "typeParams": null + "kind": "number" } } } @@ -2327,8 +1765,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 1198, - "end": 1199 + "start": 877, + "end": 878 }, "value": 5.0, "raw": "5" @@ -2338,68 +1776,54 @@ { "type": "ExpressionStatement", "span": { - "start": 1201, - "end": 1230 + "start": 880, + "end": 903 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1201, - "end": 1229 + "start": 880, + "end": 902 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 1201, - "end": 1225 + "start": 880, + "end": 898 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 1202, - "end": 1224 + "start": 880, + "end": 881 }, - "expression": { - "type": "Identifier", - "span": { - "start": 1202, - "end": 1203 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsTypeOperator", + "span": { + "start": 885, + "end": 898 }, + "op": "unique", "typeAnnotation": { - "type": "TsTypeOperator", + "type": "TsKeywordType", "span": { - "start": 1207, - "end": 1224 + "start": 892, + "end": 898 }, - "op": "readonly", - "typeAnnotation": { - "type": "TsArrayType", - "span": { - "start": 1216, - "end": 1224 - }, - "elemType": { - "type": "TsKeywordType", - "span": { - "start": 1216, - "end": 1222 - }, - "kind": "number" - } - } + "kind": "symbol" } } }, "right": { "type": "NumericLiteral", "span": { - "start": 1228, - "end": 1229 + "start": 901, + "end": 902 }, "value": 5.0, "raw": "5" @@ -2409,61 +1833,82 @@ { "type": "ExpressionStatement", "span": { - "start": 1231, - "end": 1256 + "start": 944, + "end": 958 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1231, - "end": 1255 + "start": 944, + "end": 957 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 1231, - "end": 1251 + "start": 944, + "end": 953 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 1232, - "end": 1250 + "start": 944, + "end": 945 }, - "expression": { - "type": "Identifier", + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsIndexedAccessType", + "span": { + "start": 949, + "end": 953 + }, + "readonly": false, + "objectType": { + "type": "TsTypeReference", "span": { - "start": 1232, - "end": 1233 + "start": 949, + "end": 950 }, - "ctxt": 0, - "value": "i", - "optional": false + "typeName": { + "type": "Identifier", + "span": { + "start": 949, + "end": 950 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null }, - "typeAnnotation": { - "type": "TsTypeOperator", + "indexType": { + "type": "TsTypeReference", "span": { - "start": 1237, - "end": 1250 + "start": 951, + "end": 952 }, - "op": "unique", - "typeAnnotation": { - "type": "TsKeywordType", + "typeName": { + "type": "Identifier", "span": { - "start": 1244, - "end": 1250 + "start": 951, + "end": 952 }, - "kind": "symbol" - } + "ctxt": 0, + "value": "K", + "optional": false + }, + "typeParams": null } } }, "right": { "type": "NumericLiteral", "span": { - "start": 1254, - "end": 1255 + "start": 956, + "end": 957 }, "value": 5.0, "raw": "5" @@ -2473,89 +1918,107 @@ { "type": "ExpressionStatement", "span": { - "start": 1297, - "end": 1313 + "start": 996, + "end": 1030 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1297, - "end": 1312 + "start": 996, + "end": 1029 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 1297, - "end": 1308 + "start": 996, + "end": 1025 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 1298, - "end": 1307 + "start": 996, + "end": 997 }, - "expression": { - "type": "Identifier", + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsConditionalType", + "span": { + "start": 1001, + "end": 1025 + }, + "checkType": { + "type": "TsTypeReference", "span": { - "start": 1298, - "end": 1299 + "start": 1001, + "end": 1002 }, - "ctxt": 0, - "value": "i", - "optional": false + "typeName": { + "type": "Identifier", + "span": { + "start": 1001, + "end": 1002 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null }, - "typeAnnotation": { - "type": "TsIndexedAccessType", + "extendsType": { + "type": "TsTypeReference", "span": { - "start": 1303, - "end": 1307 + "start": 1011, + "end": 1012 }, - "readonly": false, - "objectType": { - "type": "TsTypeReference", + "typeName": { + "type": "Identifier", "span": { - "start": 1303, - "end": 1304 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1303, - "end": 1304 - }, - "ctxt": 0, - "value": "T", - "optional": false + "start": 1011, + "end": 1012 }, - "typeParams": null + "ctxt": 0, + "value": "U", + "optional": false }, - "indexType": { - "type": "TsTypeReference", + "typeParams": null + }, + "trueType": { + "type": "TsTypeReference", + "span": { + "start": 1015, + "end": 1016 + }, + "typeName": { + "type": "Identifier", "span": { - "start": 1305, - "end": 1306 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1305, - "end": 1306 - }, - "ctxt": 0, - "value": "K", - "optional": false + "start": 1015, + "end": 1016 }, - "typeParams": null - } + "ctxt": 0, + "value": "X", + "optional": false + }, + "typeParams": null + }, + "falseType": { + "type": "TsKeywordType", + "span": { + "start": 1019, + "end": 1025 + }, + "kind": "string" } } }, "right": { "type": "NumericLiteral", "span": { - "start": 1311, - "end": 1312 + "start": 1028, + "end": 1029 }, "value": 5.0, "raw": "5" @@ -2565,115 +2028,134 @@ { "type": "ExpressionStatement", "span": { - "start": 1351, - "end": 1382 + "start": 1031, + "end": 1063 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1351, - "end": 1381 + "start": 1031, + "end": 1062 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 1351, - "end": 1377 + "start": 1031, + "end": 1058 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 1352, - "end": 1376 + "start": 1031, + "end": 1032 }, - "expression": { - "type": "Identifier", + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsConditionalType", + "span": { + "start": 1036, + "end": 1058 + }, + "checkType": { + "type": "TsTypeReference", "span": { - "start": 1352, - "end": 1353 + "start": 1036, + "end": 1037 }, - "ctxt": 0, - "value": "i", - "optional": false + "typeName": { + "type": "Identifier", + "span": { + "start": 1036, + "end": 1037 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null }, - "typeAnnotation": { - "type": "TsConditionalType", + "extendsType": { + "type": "TsTypeReference", "span": { - "start": 1357, - "end": 1376 + "start": 1046, + "end": 1047 }, - "checkType": { - "type": "TsTypeReference", + "typeName": { + "type": "Identifier", "span": { - "start": 1357, - "end": 1358 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1357, - "end": 1358 - }, - "ctxt": 0, - "value": "T", - "optional": false + "start": 1046, + "end": 1047 }, - "typeParams": null + "ctxt": 0, + "value": "U", + "optional": false }, - "extendsType": { - "type": "TsTypeReference", + "typeParams": null + }, + "trueType": { + "type": "TsTypeReference", + "span": { + "start": 1050, + "end": 1051 + }, + "typeName": { + "type": "Identifier", "span": { - "start": 1367, - "end": 1368 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1367, - "end": 1368 - }, - "ctxt": 0, - "value": "U", - "optional": false + "start": 1050, + "end": 1051 }, - "typeParams": null + "ctxt": 0, + "value": "X", + "optional": false }, - "trueType": { - "type": "TsTypeReference", + "typeParams": null + }, + "falseType": { + "type": "TsTypeReference", + "span": { + "start": 1054, + "end": 1058 + }, + "typeName": { + "type": "Identifier", "span": { - "start": 1371, - "end": 1372 + "start": 1054, + "end": 1055 }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1371, - "end": 1372 - }, - "ctxt": 0, - "value": "X", - "optional": false - }, - "typeParams": null + "ctxt": 0, + "value": "Y", + "optional": false }, - "falseType": { - "type": "TsTypeReference", + "typeParams": { + "type": "TsTypeParameterInstantiation", "span": { - "start": 1375, - "end": 1376 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1375, - "end": 1376 - }, - "ctxt": 0, - "value": "Y", - "optional": false + "start": 1055, + "end": 1058 }, - "typeParams": null + "params": [ + { + "type": "TsTypeReference", + "span": { + "start": 1056, + "end": 1057 + }, + "typeName": { + "type": "Identifier", + "span": { + "start": 1056, + "end": 1057 + }, + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } + ] } } } @@ -2681,8 +2163,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 1380, - "end": 1381 + "start": 1061, + "end": 1062 }, "value": 5.0, "raw": "5" @@ -2692,120 +2174,113 @@ { "type": "ExpressionStatement", "span": { - "start": 1415, - "end": 1448 + "start": 1096, + "end": 1127 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1415, - "end": 1447 + "start": 1096, + "end": 1126 }, "operator": "<", "left": { - "type": "ParenthesisExpression", + "type": "TsAsExpression", "span": { - "start": 1415, - "end": 1443 + "start": 1096, + "end": 1122 }, "expression": { - "type": "TsAsExpression", + "type": "Identifier", "span": { - "start": 1416, - "end": 1442 + "start": 1096, + "end": 1097 }, - "expression": { - "type": "Identifier", - "span": { - "start": 1416, - "end": 1417 - }, - "ctxt": 0, - "value": "i", - "optional": false + "ctxt": 0, + "value": "i", + "optional": false + }, + "typeAnnotation": { + "type": "TsMappedType", + "span": { + "start": 1101, + "end": 1122 }, - "typeAnnotation": { - "type": "TsMappedType", + "readonly": null, + "typeParam": { + "type": "TsTypeParameter", "span": { - "start": 1421, - "end": 1442 + "start": 1104, + "end": 1116 }, - "readonly": null, - "typeParam": { - "type": "TsTypeParameter", + "name": { + "type": "Identifier", "span": { - "start": 1424, - "end": 1436 + "start": 1104, + "end": 1105 }, - "name": { - "type": "Identifier", - "span": { - "start": 1424, - "end": 1425 - }, - "ctxt": 0, - "value": "K", - "optional": false + "ctxt": 0, + "value": "K", + "optional": false + }, + "in": false, + "out": false, + "const": false, + "constraint": { + "type": "TsTypeOperator", + "span": { + "start": 1109, + "end": 1116 }, - "in": false, - "out": false, - "const": false, - "constraint": { - "type": "TsTypeOperator", + "op": "keyof", + "typeAnnotation": { + "type": "TsTypeReference", "span": { - "start": 1429, - "end": 1436 + "start": 1115, + "end": 1116 }, - "op": "keyof", - "typeAnnotation": { - "type": "TsTypeReference", + "typeName": { + "type": "Identifier", "span": { - "start": 1435, - "end": 1436 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1435, - "end": 1436 - }, - "ctxt": 0, - "value": "T", - "optional": false + "start": 1115, + "end": 1116 }, - "typeParams": null - } - }, - "default": null + "ctxt": 0, + "value": "T", + "optional": false + }, + "typeParams": null + } }, - "nameType": null, - "optional": null, - "typeAnnotation": { - "type": "TsTypeReference", + "default": null + }, + "nameType": null, + "optional": null, + "typeAnnotation": { + "type": "TsTypeReference", + "span": { + "start": 1119, + "end": 1120 + }, + "typeName": { + "type": "Identifier", "span": { - "start": 1439, - "end": 1440 - }, - "typeName": { - "type": "Identifier", - "span": { - "start": 1439, - "end": 1440 - }, - "ctxt": 0, - "value": "V", - "optional": false + "start": 1119, + "end": 1120 }, - "typeParams": null - } + "ctxt": 0, + "value": "V", + "optional": false + }, + "typeParams": null } } }, "right": { "type": "NumericLiteral", "span": { - "start": 1446, - "end": 1447 + "start": 1125, + "end": 1126 }, "value": 5.0, "raw": "5" From e18227b80a97e7b6cf70976a02bd85357fc4f5a2 Mon Sep 17 00:00:00 2001 From: Steffen Heil | secforge Date: Sun, 9 Nov 2025 15:21:33 +0100 Subject: [PATCH 3/4] update test --- .../cast/primitive-vs-reference/input.ts | 68 +- .../cast/primitive-vs-reference/input.ts.json | 1154 ++++++++--------- 2 files changed, 611 insertions(+), 611 deletions(-) diff --git a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts index b83d369cf688..36579890c889 100644 --- a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts +++ b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts @@ -1,58 +1,58 @@ -// Primitive keyword types - < should be comparison operator -i as number < 5; -i as string < "hello"; -i as boolean < true; -i as any < foo; -i as void < bar; -i as undefined < baz; -i as null < qux; -i as never < abc; -i as unknown < def; -i as object < ghi; -i as symbol < jkl; -i as bigint < 10n; +// Primitive keyword types - >= should be comparison operator +i as number >= 5; +i as string >= "hello"; +i as boolean >= true; +i as any >= foo; +i as void >= bar; +i as undefined >= baz; +i as null >= qux; +i as never >= abc; +i as unknown >= def; +i as object >= ghi; +i as symbol >= jkl; +i as bigint >= 10n; // satisfies with primitive types -i satisfies number < 5; -i satisfies string < "test"; +i satisfies number >= 5; +i satisfies string >= "test"; // Literal types - should be treated as primitives -i as 2 < 5; -i as "x" < "y"; -i as true < false; -i as 10n < 20n; +i as 2 >= 5; +i as "x" >= "y"; +i as true >= false; +i as 10n >= 20n; // this type - non-callable -i as this < 5; +i as this >= 5; // Array types -i as X[] < 5; +i as X[] >= 5; // Generic types -i as X < 5; +i as X >= 5; // Tuple types - non-callable -i as [X, Y] < 5; +i as [X, Y] >= 5; // Union types - non-callable -i as A | string < 5; -i as A | B < 5; +i as A | string >= 5; +i as A | B >= 5; // Intersection types - non-callable -i as A & string < 5; -i as A & B < 5; +i as A & string >= 5; +i as A & B >= 5; // Type operators - non-callable -i as keyof T < 5; -i as readonly number[] < 5; -i as unique symbol < 5; +i as keyof T >= 5; +i as readonly number[] >= 5; +i as unique symbol >= 5; // Indexed access types - non-callable -i as T[K] < 5; +i as T[K] >= 5; // Conditional types - non-callable -i as T extends U ? X : string < 5; -i as T extends U ? X : Y < 5; +i as T extends U ? X : string >= 5; +i as T extends U ? X : Y >= 5; // Mapped types - non-callable -i as { [K in keyof T]: V } < 5; +i as { [K in keyof T]: V } >= 5; diff --git a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json index 14dcb81d5ced..44d7348f9791 100644 --- a/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json +++ b/crates/swc_ecma_parser/tests/typescript/cast/primitive-vs-reference/input.ts.json @@ -1,34 +1,34 @@ { "type": "Script", "span": { - "start": 62, - "end": 1127 + "start": 63, + "end": 1161 }, "body": [ { "type": "ExpressionStatement", "span": { - "start": 62, - "end": 78 + "start": 63, + "end": 80 }, "expression": { "type": "BinaryExpression", "span": { - "start": 62, - "end": 77 + "start": 63, + "end": 79 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 62, - "end": 73 + "start": 63, + "end": 74 }, "expression": { "type": "Identifier", "span": { - "start": 62, - "end": 63 + "start": 63, + "end": 64 }, "ctxt": 0, "value": "i", @@ -37,8 +37,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 67, - "end": 73 + "start": 68, + "end": 74 }, "kind": "number" } @@ -46,8 +46,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 76, - "end": 77 + "start": 78, + "end": 79 }, "value": 5.0, "raw": "5" @@ -57,27 +57,27 @@ { "type": "ExpressionStatement", "span": { - "start": 79, - "end": 101 + "start": 81, + "end": 104 }, "expression": { "type": "BinaryExpression", "span": { - "start": 79, - "end": 100 + "start": 81, + "end": 103 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 79, - "end": 90 + "start": 81, + "end": 92 }, "expression": { "type": "Identifier", "span": { - "start": 79, - "end": 80 + "start": 81, + "end": 82 }, "ctxt": 0, "value": "i", @@ -86,8 +86,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 84, - "end": 90 + "start": 86, + "end": 92 }, "kind": "string" } @@ -95,8 +95,8 @@ "right": { "type": "StringLiteral", "span": { - "start": 93, - "end": 100 + "start": 96, + "end": 103 }, "value": "hello", "raw": "\"hello\"" @@ -106,27 +106,27 @@ { "type": "ExpressionStatement", "span": { - "start": 102, - "end": 122 + "start": 105, + "end": 126 }, "expression": { "type": "BinaryExpression", "span": { - "start": 102, - "end": 121 + "start": 105, + "end": 125 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 102, - "end": 114 + "start": 105, + "end": 117 }, "expression": { "type": "Identifier", "span": { - "start": 102, - "end": 103 + "start": 105, + "end": 106 }, "ctxt": 0, "value": "i", @@ -135,8 +135,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 107, - "end": 114 + "start": 110, + "end": 117 }, "kind": "boolean" } @@ -144,8 +144,8 @@ "right": { "type": "BooleanLiteral", "span": { - "start": 117, - "end": 121 + "start": 121, + "end": 125 }, "value": true } @@ -154,27 +154,27 @@ { "type": "ExpressionStatement", "span": { - "start": 123, - "end": 138 + "start": 127, + "end": 143 }, "expression": { "type": "BinaryExpression", "span": { - "start": 123, - "end": 137 + "start": 127, + "end": 142 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 123, - "end": 131 + "start": 127, + "end": 135 }, "expression": { "type": "Identifier", "span": { - "start": 123, - "end": 124 + "start": 127, + "end": 128 }, "ctxt": 0, "value": "i", @@ -183,8 +183,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 128, - "end": 131 + "start": 132, + "end": 135 }, "kind": "any" } @@ -192,8 +192,8 @@ "right": { "type": "Identifier", "span": { - "start": 134, - "end": 137 + "start": 139, + "end": 142 }, "ctxt": 0, "value": "foo", @@ -204,27 +204,27 @@ { "type": "ExpressionStatement", "span": { - "start": 139, - "end": 155 + "start": 144, + "end": 161 }, "expression": { "type": "BinaryExpression", "span": { - "start": 139, - "end": 154 + "start": 144, + "end": 160 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 139, - "end": 148 + "start": 144, + "end": 153 }, "expression": { "type": "Identifier", "span": { - "start": 139, - "end": 140 + "start": 144, + "end": 145 }, "ctxt": 0, "value": "i", @@ -233,8 +233,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 144, - "end": 148 + "start": 149, + "end": 153 }, "kind": "void" } @@ -242,8 +242,8 @@ "right": { "type": "Identifier", "span": { - "start": 151, - "end": 154 + "start": 157, + "end": 160 }, "ctxt": 0, "value": "bar", @@ -254,27 +254,27 @@ { "type": "ExpressionStatement", "span": { - "start": 156, - "end": 177 + "start": 162, + "end": 184 }, "expression": { "type": "BinaryExpression", "span": { - "start": 156, - "end": 176 + "start": 162, + "end": 183 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 156, - "end": 170 + "start": 162, + "end": 176 }, "expression": { "type": "Identifier", "span": { - "start": 156, - "end": 157 + "start": 162, + "end": 163 }, "ctxt": 0, "value": "i", @@ -283,8 +283,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 161, - "end": 170 + "start": 167, + "end": 176 }, "kind": "undefined" } @@ -292,8 +292,8 @@ "right": { "type": "Identifier", "span": { - "start": 173, - "end": 176 + "start": 180, + "end": 183 }, "ctxt": 0, "value": "baz", @@ -304,27 +304,27 @@ { "type": "ExpressionStatement", "span": { - "start": 178, - "end": 194 + "start": 185, + "end": 202 }, "expression": { "type": "BinaryExpression", "span": { - "start": 178, - "end": 193 + "start": 185, + "end": 201 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 178, - "end": 187 + "start": 185, + "end": 194 }, "expression": { "type": "Identifier", "span": { - "start": 178, - "end": 179 + "start": 185, + "end": 186 }, "ctxt": 0, "value": "i", @@ -333,8 +333,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 183, - "end": 187 + "start": 190, + "end": 194 }, "kind": "null" } @@ -342,8 +342,8 @@ "right": { "type": "Identifier", "span": { - "start": 190, - "end": 193 + "start": 198, + "end": 201 }, "ctxt": 0, "value": "qux", @@ -354,27 +354,27 @@ { "type": "ExpressionStatement", "span": { - "start": 195, - "end": 212 + "start": 203, + "end": 221 }, "expression": { "type": "BinaryExpression", "span": { - "start": 195, - "end": 211 + "start": 203, + "end": 220 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 195, - "end": 205 + "start": 203, + "end": 213 }, "expression": { "type": "Identifier", "span": { - "start": 195, - "end": 196 + "start": 203, + "end": 204 }, "ctxt": 0, "value": "i", @@ -383,8 +383,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 200, - "end": 205 + "start": 208, + "end": 213 }, "kind": "never" } @@ -392,8 +392,8 @@ "right": { "type": "Identifier", "span": { - "start": 208, - "end": 211 + "start": 217, + "end": 220 }, "ctxt": 0, "value": "abc", @@ -404,27 +404,27 @@ { "type": "ExpressionStatement", "span": { - "start": 213, - "end": 232 + "start": 222, + "end": 242 }, "expression": { "type": "BinaryExpression", "span": { - "start": 213, - "end": 231 + "start": 222, + "end": 241 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 213, - "end": 225 + "start": 222, + "end": 234 }, "expression": { "type": "Identifier", "span": { - "start": 213, - "end": 214 + "start": 222, + "end": 223 }, "ctxt": 0, "value": "i", @@ -433,8 +433,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 218, - "end": 225 + "start": 227, + "end": 234 }, "kind": "unknown" } @@ -442,8 +442,8 @@ "right": { "type": "Identifier", "span": { - "start": 228, - "end": 231 + "start": 238, + "end": 241 }, "ctxt": 0, "value": "def", @@ -454,27 +454,27 @@ { "type": "ExpressionStatement", "span": { - "start": 233, - "end": 251 + "start": 243, + "end": 262 }, "expression": { "type": "BinaryExpression", "span": { - "start": 233, - "end": 250 + "start": 243, + "end": 261 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 233, - "end": 244 + "start": 243, + "end": 254 }, "expression": { "type": "Identifier", "span": { - "start": 233, - "end": 234 + "start": 243, + "end": 244 }, "ctxt": 0, "value": "i", @@ -483,8 +483,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 238, - "end": 244 + "start": 248, + "end": 254 }, "kind": "object" } @@ -492,8 +492,8 @@ "right": { "type": "Identifier", "span": { - "start": 247, - "end": 250 + "start": 258, + "end": 261 }, "ctxt": 0, "value": "ghi", @@ -504,27 +504,27 @@ { "type": "ExpressionStatement", "span": { - "start": 252, - "end": 270 + "start": 263, + "end": 282 }, "expression": { "type": "BinaryExpression", "span": { - "start": 252, - "end": 269 + "start": 263, + "end": 281 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 252, - "end": 263 + "start": 263, + "end": 274 }, "expression": { "type": "Identifier", "span": { - "start": 252, - "end": 253 + "start": 263, + "end": 264 }, "ctxt": 0, "value": "i", @@ -533,8 +533,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 257, - "end": 263 + "start": 268, + "end": 274 }, "kind": "symbol" } @@ -542,8 +542,8 @@ "right": { "type": "Identifier", "span": { - "start": 266, - "end": 269 + "start": 278, + "end": 281 }, "ctxt": 0, "value": "jkl", @@ -554,27 +554,27 @@ { "type": "ExpressionStatement", "span": { - "start": 271, - "end": 289 + "start": 283, + "end": 302 }, "expression": { "type": "BinaryExpression", "span": { - "start": 271, - "end": 288 + "start": 283, + "end": 301 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 271, - "end": 282 + "start": 283, + "end": 294 }, "expression": { "type": "Identifier", "span": { - "start": 271, - "end": 272 + "start": 283, + "end": 284 }, "ctxt": 0, "value": "i", @@ -583,8 +583,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 276, - "end": 282 + "start": 288, + "end": 294 }, "kind": "bigint" } @@ -592,8 +592,8 @@ "right": { "type": "BigIntLiteral", "span": { - "start": 285, - "end": 288 + "start": 298, + "end": 301 }, "value": [ 1, @@ -608,27 +608,27 @@ { "type": "ExpressionStatement", "span": { - "start": 325, - "end": 348 + "start": 338, + "end": 362 }, "expression": { "type": "BinaryExpression", "span": { - "start": 325, - "end": 347 + "start": 338, + "end": 361 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsSatisfiesExpression", "span": { - "start": 325, - "end": 343 + "start": 338, + "end": 356 }, "expression": { "type": "Identifier", "span": { - "start": 325, - "end": 326 + "start": 338, + "end": 339 }, "ctxt": 0, "value": "i", @@ -637,8 +637,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 337, - "end": 343 + "start": 350, + "end": 356 }, "kind": "number" } @@ -646,8 +646,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 346, - "end": 347 + "start": 360, + "end": 361 }, "value": 5.0, "raw": "5" @@ -657,27 +657,27 @@ { "type": "ExpressionStatement", "span": { - "start": 349, - "end": 377 + "start": 363, + "end": 392 }, "expression": { "type": "BinaryExpression", "span": { - "start": 349, - "end": 376 + "start": 363, + "end": 391 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsSatisfiesExpression", "span": { - "start": 349, - "end": 367 + "start": 363, + "end": 381 }, "expression": { "type": "Identifier", "span": { - "start": 349, - "end": 350 + "start": 363, + "end": 364 }, "ctxt": 0, "value": "i", @@ -686,8 +686,8 @@ "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 361, - "end": 367 + "start": 375, + "end": 381 }, "kind": "string" } @@ -695,8 +695,8 @@ "right": { "type": "StringLiteral", "span": { - "start": 370, - "end": 376 + "start": 385, + "end": 391 }, "value": "test", "raw": "\"test\"" @@ -706,27 +706,27 @@ { "type": "ExpressionStatement", "span": { - "start": 430, - "end": 441 + "start": 445, + "end": 457 }, "expression": { "type": "BinaryExpression", "span": { - "start": 430, - "end": 440 + "start": 445, + "end": 456 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 430, - "end": 436 + "start": 445, + "end": 451 }, "expression": { "type": "Identifier", "span": { - "start": 430, - "end": 431 + "start": 445, + "end": 446 }, "ctxt": 0, "value": "i", @@ -735,14 +735,14 @@ "typeAnnotation": { "type": "TsLiteralType", "span": { - "start": 435, - "end": 436 + "start": 450, + "end": 451 }, "literal": { "type": "NumericLiteral", "span": { - "start": 435, - "end": 436 + "start": 450, + "end": 451 }, "value": 2.0, "raw": "2" @@ -752,8 +752,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 439, - "end": 440 + "start": 455, + "end": 456 }, "value": 5.0, "raw": "5" @@ -763,27 +763,27 @@ { "type": "ExpressionStatement", "span": { - "start": 442, - "end": 457 + "start": 458, + "end": 474 }, "expression": { "type": "BinaryExpression", "span": { - "start": 442, - "end": 456 + "start": 458, + "end": 473 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 442, - "end": 450 + "start": 458, + "end": 466 }, "expression": { "type": "Identifier", "span": { - "start": 442, - "end": 443 + "start": 458, + "end": 459 }, "ctxt": 0, "value": "i", @@ -792,14 +792,14 @@ "typeAnnotation": { "type": "TsLiteralType", "span": { - "start": 447, - "end": 450 + "start": 463, + "end": 466 }, "literal": { "type": "StringLiteral", "span": { - "start": 447, - "end": 450 + "start": 463, + "end": 466 }, "value": "x", "raw": "\"x\"" @@ -809,8 +809,8 @@ "right": { "type": "StringLiteral", "span": { - "start": 453, - "end": 456 + "start": 470, + "end": 473 }, "value": "y", "raw": "\"y\"" @@ -820,27 +820,27 @@ { "type": "ExpressionStatement", "span": { - "start": 458, - "end": 476 + "start": 475, + "end": 494 }, "expression": { "type": "BinaryExpression", "span": { - "start": 458, - "end": 475 + "start": 475, + "end": 493 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 458, - "end": 467 + "start": 475, + "end": 484 }, "expression": { "type": "Identifier", "span": { - "start": 458, - "end": 459 + "start": 475, + "end": 476 }, "ctxt": 0, "value": "i", @@ -849,14 +849,14 @@ "typeAnnotation": { "type": "TsLiteralType", "span": { - "start": 463, - "end": 467 + "start": 480, + "end": 484 }, "literal": { "type": "BooleanLiteral", "span": { - "start": 463, - "end": 467 + "start": 480, + "end": 484 }, "value": true } @@ -865,8 +865,8 @@ "right": { "type": "BooleanLiteral", "span": { - "start": 470, - "end": 475 + "start": 488, + "end": 493 }, "value": false } @@ -875,27 +875,27 @@ { "type": "ExpressionStatement", "span": { - "start": 477, - "end": 492 + "start": 495, + "end": 511 }, "expression": { "type": "BinaryExpression", "span": { - "start": 477, - "end": 491 + "start": 495, + "end": 510 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 477, - "end": 485 + "start": 495, + "end": 503 }, "expression": { "type": "Identifier", "span": { - "start": 477, - "end": 478 + "start": 495, + "end": 496 }, "ctxt": 0, "value": "i", @@ -904,14 +904,14 @@ "typeAnnotation": { "type": "TsLiteralType", "span": { - "start": 482, - "end": 485 + "start": 500, + "end": 503 }, "literal": { "type": "BigIntLiteral", "span": { - "start": 482, - "end": 485 + "start": 500, + "end": 503 }, "value": [ 1, @@ -926,8 +926,8 @@ "right": { "type": "BigIntLiteral", "span": { - "start": 488, - "end": 491 + "start": 507, + "end": 510 }, "value": [ 1, @@ -942,27 +942,27 @@ { "type": "ExpressionStatement", "span": { - "start": 522, - "end": 536 + "start": 541, + "end": 556 }, "expression": { "type": "BinaryExpression", "span": { - "start": 522, - "end": 535 + "start": 541, + "end": 555 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 522, - "end": 531 + "start": 541, + "end": 550 }, "expression": { "type": "Identifier", "span": { - "start": 522, - "end": 523 + "start": 541, + "end": 542 }, "ctxt": 0, "value": "i", @@ -971,16 +971,16 @@ "typeAnnotation": { "type": "TsThisType", "span": { - "start": 527, - "end": 531 + "start": 546, + "end": 550 } } }, "right": { "type": "NumericLiteral", "span": { - "start": 534, - "end": 535 + "start": 554, + "end": 555 }, "value": 5.0, "raw": "5" @@ -990,27 +990,27 @@ { "type": "ExpressionStatement", "span": { - "start": 553, - "end": 566 + "start": 573, + "end": 587 }, "expression": { "type": "BinaryExpression", "span": { - "start": 553, - "end": 565 + "start": 573, + "end": 586 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 553, - "end": 561 + "start": 573, + "end": 581 }, "expression": { "type": "Identifier", "span": { - "start": 553, - "end": 554 + "start": 573, + "end": 574 }, "ctxt": 0, "value": "i", @@ -1019,20 +1019,20 @@ "typeAnnotation": { "type": "TsArrayType", "span": { - "start": 558, - "end": 561 + "start": 578, + "end": 581 }, "elemType": { "type": "TsTypeReference", "span": { - "start": 558, - "end": 559 + "start": 578, + "end": 579 }, "typeName": { "type": "Identifier", "span": { - "start": 558, - "end": 559 + "start": 578, + "end": 579 }, "ctxt": 0, "value": "X", @@ -1045,8 +1045,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 564, - "end": 565 + "start": 585, + "end": 586 }, "value": 5.0, "raw": "5" @@ -1056,27 +1056,27 @@ { "type": "ExpressionStatement", "span": { - "start": 585, - "end": 599 + "start": 606, + "end": 621 }, "expression": { "type": "BinaryExpression", "span": { - "start": 585, - "end": 598 + "start": 606, + "end": 620 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 585, - "end": 594 + "start": 606, + "end": 615 }, "expression": { "type": "Identifier", "span": { - "start": 585, - "end": 586 + "start": 606, + "end": 607 }, "ctxt": 0, "value": "i", @@ -1085,14 +1085,14 @@ "typeAnnotation": { "type": "TsTypeReference", "span": { - "start": 590, - "end": 594 + "start": 611, + "end": 615 }, "typeName": { "type": "Identifier", "span": { - "start": 590, - "end": 591 + "start": 611, + "end": 612 }, "ctxt": 0, "value": "X", @@ -1101,21 +1101,21 @@ "typeParams": { "type": "TsTypeParameterInstantiation", "span": { - "start": 591, - "end": 594 + "start": 612, + "end": 615 }, "params": [ { "type": "TsTypeReference", "span": { - "start": 592, - "end": 593 + "start": 613, + "end": 614 }, "typeName": { "type": "Identifier", "span": { - "start": 592, - "end": 593 + "start": 613, + "end": 614 }, "ctxt": 0, "value": "Y", @@ -1130,8 +1130,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 597, - "end": 598 + "start": 619, + "end": 620 }, "value": 5.0, "raw": "5" @@ -1141,27 +1141,27 @@ { "type": "ExpressionStatement", "span": { - "start": 631, - "end": 647 + "start": 653, + "end": 670 }, "expression": { "type": "BinaryExpression", "span": { - "start": 631, - "end": 646 + "start": 653, + "end": 669 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 631, - "end": 642 + "start": 653, + "end": 664 }, "expression": { "type": "Identifier", "span": { - "start": 631, - "end": 632 + "start": 653, + "end": 654 }, "ctxt": 0, "value": "i", @@ -1170,28 +1170,28 @@ "typeAnnotation": { "type": "TsTupleType", "span": { - "start": 636, - "end": 642 + "start": 658, + "end": 664 }, "elemTypes": [ { "type": "TsTupleElement", "span": { - "start": 637, - "end": 638 + "start": 659, + "end": 660 }, "label": null, "ty": { "type": "TsTypeReference", "span": { - "start": 637, - "end": 638 + "start": 659, + "end": 660 }, "typeName": { "type": "Identifier", "span": { - "start": 637, - "end": 638 + "start": 659, + "end": 660 }, "ctxt": 0, "value": "X", @@ -1203,21 +1203,21 @@ { "type": "TsTupleElement", "span": { - "start": 640, - "end": 641 + "start": 662, + "end": 663 }, "label": null, "ty": { "type": "TsTypeReference", "span": { - "start": 640, - "end": 641 + "start": 662, + "end": 663 }, "typeName": { "type": "Identifier", "span": { - "start": 640, - "end": 641 + "start": 662, + "end": 663 }, "ctxt": 0, "value": "Y", @@ -1232,8 +1232,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 645, - "end": 646 + "start": 668, + "end": 669 }, "value": 5.0, "raw": "5" @@ -1243,27 +1243,27 @@ { "type": "ExpressionStatement", "span": { - "start": 679, - "end": 699 + "start": 702, + "end": 723 }, "expression": { "type": "BinaryExpression", "span": { - "start": 679, - "end": 698 + "start": 702, + "end": 722 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 679, - "end": 694 + "start": 702, + "end": 717 }, "expression": { "type": "Identifier", "span": { - "start": 679, - "end": 680 + "start": 702, + "end": 703 }, "ctxt": 0, "value": "i", @@ -1272,21 +1272,21 @@ "typeAnnotation": { "type": "TsUnionType", "span": { - "start": 684, - "end": 694 + "start": 707, + "end": 717 }, "types": [ { "type": "TsTypeReference", "span": { - "start": 684, - "end": 685 + "start": 707, + "end": 708 }, "typeName": { "type": "Identifier", "span": { - "start": 684, - "end": 685 + "start": 707, + "end": 708 }, "ctxt": 0, "value": "A", @@ -1297,8 +1297,8 @@ { "type": "TsKeywordType", "span": { - "start": 688, - "end": 694 + "start": 711, + "end": 717 }, "kind": "string" } @@ -1308,8 +1308,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 697, - "end": 698 + "start": 721, + "end": 722 }, "value": 5.0, "raw": "5" @@ -1319,27 +1319,27 @@ { "type": "ExpressionStatement", "span": { - "start": 700, - "end": 718 + "start": 724, + "end": 743 }, "expression": { "type": "BinaryExpression", "span": { - "start": 700, - "end": 717 + "start": 724, + "end": 742 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 700, - "end": 713 + "start": 724, + "end": 737 }, "expression": { "type": "Identifier", "span": { - "start": 700, - "end": 701 + "start": 724, + "end": 725 }, "ctxt": 0, "value": "i", @@ -1348,21 +1348,21 @@ "typeAnnotation": { "type": "TsUnionType", "span": { - "start": 705, - "end": 713 + "start": 729, + "end": 737 }, "types": [ { "type": "TsTypeReference", "span": { - "start": 705, - "end": 706 + "start": 729, + "end": 730 }, "typeName": { "type": "Identifier", "span": { - "start": 705, - "end": 706 + "start": 729, + "end": 730 }, "ctxt": 0, "value": "A", @@ -1373,14 +1373,14 @@ { "type": "TsTypeReference", "span": { - "start": 709, - "end": 713 + "start": 733, + "end": 737 }, "typeName": { "type": "Identifier", "span": { - "start": 709, - "end": 710 + "start": 733, + "end": 734 }, "ctxt": 0, "value": "B", @@ -1389,21 +1389,21 @@ "typeParams": { "type": "TsTypeParameterInstantiation", "span": { - "start": 710, - "end": 713 + "start": 734, + "end": 737 }, "params": [ { "type": "TsTypeReference", "span": { - "start": 711, - "end": 712 + "start": 735, + "end": 736 }, "typeName": { "type": "Identifier", "span": { - "start": 711, - "end": 712 + "start": 735, + "end": 736 }, "ctxt": 0, "value": "T", @@ -1420,8 +1420,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 716, - "end": 717 + "start": 741, + "end": 742 }, "value": 5.0, "raw": "5" @@ -1431,27 +1431,27 @@ { "type": "ExpressionStatement", "span": { - "start": 757, - "end": 777 + "start": 782, + "end": 803 }, "expression": { "type": "BinaryExpression", "span": { - "start": 757, - "end": 776 + "start": 782, + "end": 802 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 757, - "end": 772 + "start": 782, + "end": 797 }, "expression": { "type": "Identifier", "span": { - "start": 757, - "end": 758 + "start": 782, + "end": 783 }, "ctxt": 0, "value": "i", @@ -1460,21 +1460,21 @@ "typeAnnotation": { "type": "TsIntersectionType", "span": { - "start": 762, - "end": 772 + "start": 787, + "end": 797 }, "types": [ { "type": "TsTypeReference", "span": { - "start": 762, - "end": 763 + "start": 787, + "end": 788 }, "typeName": { "type": "Identifier", "span": { - "start": 762, - "end": 763 + "start": 787, + "end": 788 }, "ctxt": 0, "value": "A", @@ -1485,8 +1485,8 @@ { "type": "TsKeywordType", "span": { - "start": 766, - "end": 772 + "start": 791, + "end": 797 }, "kind": "string" } @@ -1496,8 +1496,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 775, - "end": 776 + "start": 801, + "end": 802 }, "value": 5.0, "raw": "5" @@ -1507,27 +1507,27 @@ { "type": "ExpressionStatement", "span": { - "start": 778, - "end": 796 + "start": 804, + "end": 823 }, "expression": { "type": "BinaryExpression", "span": { - "start": 778, - "end": 795 + "start": 804, + "end": 822 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 778, - "end": 791 + "start": 804, + "end": 817 }, "expression": { "type": "Identifier", "span": { - "start": 778, - "end": 779 + "start": 804, + "end": 805 }, "ctxt": 0, "value": "i", @@ -1536,21 +1536,21 @@ "typeAnnotation": { "type": "TsIntersectionType", "span": { - "start": 783, - "end": 791 + "start": 809, + "end": 817 }, "types": [ { "type": "TsTypeReference", "span": { - "start": 783, - "end": 784 + "start": 809, + "end": 810 }, "typeName": { "type": "Identifier", "span": { - "start": 783, - "end": 784 + "start": 809, + "end": 810 }, "ctxt": 0, "value": "A", @@ -1561,14 +1561,14 @@ { "type": "TsTypeReference", "span": { - "start": 787, - "end": 791 + "start": 813, + "end": 817 }, "typeName": { "type": "Identifier", "span": { - "start": 787, - "end": 788 + "start": 813, + "end": 814 }, "ctxt": 0, "value": "B", @@ -1577,21 +1577,21 @@ "typeParams": { "type": "TsTypeParameterInstantiation", "span": { - "start": 788, - "end": 791 + "start": 814, + "end": 817 }, "params": [ { "type": "TsTypeReference", "span": { - "start": 789, - "end": 790 + "start": 815, + "end": 816 }, "typeName": { "type": "Identifier", "span": { - "start": 789, - "end": 790 + "start": 815, + "end": 816 }, "ctxt": 0, "value": "T", @@ -1608,8 +1608,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 794, - "end": 795 + "start": 821, + "end": 822 }, "value": 5.0, "raw": "5" @@ -1619,27 +1619,27 @@ { "type": "ExpressionStatement", "span": { - "start": 831, - "end": 851 + "start": 858, + "end": 879 }, "expression": { "type": "BinaryExpression", "span": { - "start": 831, - "end": 850 + "start": 858, + "end": 878 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 831, - "end": 846 + "start": 858, + "end": 873 }, "expression": { "type": "Identifier", "span": { - "start": 831, - "end": 832 + "start": 858, + "end": 859 }, "ctxt": 0, "value": "i", @@ -1648,21 +1648,21 @@ "typeAnnotation": { "type": "TsTypeOperator", "span": { - "start": 836, - "end": 846 + "start": 863, + "end": 873 }, "op": "keyof", "typeAnnotation": { "type": "TsTypeReference", "span": { - "start": 842, - "end": 846 + "start": 869, + "end": 873 }, "typeName": { "type": "Identifier", "span": { - "start": 842, - "end": 843 + "start": 869, + "end": 870 }, "ctxt": 0, "value": "T", @@ -1671,21 +1671,21 @@ "typeParams": { "type": "TsTypeParameterInstantiation", "span": { - "start": 843, - "end": 846 + "start": 870, + "end": 873 }, "params": [ { "type": "TsTypeReference", "span": { - "start": 844, - "end": 845 + "start": 871, + "end": 872 }, "typeName": { "type": "Identifier", "span": { - "start": 844, - "end": 845 + "start": 871, + "end": 872 }, "ctxt": 0, "value": "U", @@ -1701,8 +1701,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 849, - "end": 850 + "start": 877, + "end": 878 }, "value": 5.0, "raw": "5" @@ -1712,27 +1712,27 @@ { "type": "ExpressionStatement", "span": { - "start": 852, - "end": 879 + "start": 880, + "end": 908 }, "expression": { "type": "BinaryExpression", "span": { - "start": 852, - "end": 878 + "start": 880, + "end": 907 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 852, - "end": 874 + "start": 880, + "end": 902 }, "expression": { "type": "Identifier", "span": { - "start": 852, - "end": 853 + "start": 880, + "end": 881 }, "ctxt": 0, "value": "i", @@ -1741,21 +1741,21 @@ "typeAnnotation": { "type": "TsTypeOperator", "span": { - "start": 857, - "end": 874 + "start": 885, + "end": 902 }, "op": "readonly", "typeAnnotation": { "type": "TsArrayType", "span": { - "start": 866, - "end": 874 + "start": 894, + "end": 902 }, "elemType": { "type": "TsKeywordType", "span": { - "start": 866, - "end": 872 + "start": 894, + "end": 900 }, "kind": "number" } @@ -1765,8 +1765,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 877, - "end": 878 + "start": 906, + "end": 907 }, "value": 5.0, "raw": "5" @@ -1776,27 +1776,27 @@ { "type": "ExpressionStatement", "span": { - "start": 880, - "end": 903 + "start": 909, + "end": 933 }, "expression": { "type": "BinaryExpression", "span": { - "start": 880, - "end": 902 + "start": 909, + "end": 932 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 880, - "end": 898 + "start": 909, + "end": 927 }, "expression": { "type": "Identifier", "span": { - "start": 880, - "end": 881 + "start": 909, + "end": 910 }, "ctxt": 0, "value": "i", @@ -1805,15 +1805,15 @@ "typeAnnotation": { "type": "TsTypeOperator", "span": { - "start": 885, - "end": 898 + "start": 914, + "end": 927 }, "op": "unique", "typeAnnotation": { "type": "TsKeywordType", "span": { - "start": 892, - "end": 898 + "start": 921, + "end": 927 }, "kind": "symbol" } @@ -1822,8 +1822,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 901, - "end": 902 + "start": 931, + "end": 932 }, "value": 5.0, "raw": "5" @@ -1833,27 +1833,27 @@ { "type": "ExpressionStatement", "span": { - "start": 944, - "end": 958 + "start": 974, + "end": 989 }, "expression": { "type": "BinaryExpression", "span": { - "start": 944, - "end": 957 + "start": 974, + "end": 988 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 944, - "end": 953 + "start": 974, + "end": 983 }, "expression": { "type": "Identifier", "span": { - "start": 944, - "end": 945 + "start": 974, + "end": 975 }, "ctxt": 0, "value": "i", @@ -1862,21 +1862,21 @@ "typeAnnotation": { "type": "TsIndexedAccessType", "span": { - "start": 949, - "end": 953 + "start": 979, + "end": 983 }, "readonly": false, "objectType": { "type": "TsTypeReference", "span": { - "start": 949, - "end": 950 + "start": 979, + "end": 980 }, "typeName": { "type": "Identifier", "span": { - "start": 949, - "end": 950 + "start": 979, + "end": 980 }, "ctxt": 0, "value": "T", @@ -1887,14 +1887,14 @@ "indexType": { "type": "TsTypeReference", "span": { - "start": 951, - "end": 952 + "start": 981, + "end": 982 }, "typeName": { "type": "Identifier", "span": { - "start": 951, - "end": 952 + "start": 981, + "end": 982 }, "ctxt": 0, "value": "K", @@ -1907,8 +1907,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 956, - "end": 957 + "start": 987, + "end": 988 }, "value": 5.0, "raw": "5" @@ -1918,27 +1918,27 @@ { "type": "ExpressionStatement", "span": { - "start": 996, - "end": 1030 + "start": 1027, + "end": 1062 }, "expression": { "type": "BinaryExpression", "span": { - "start": 996, - "end": 1029 + "start": 1027, + "end": 1061 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 996, - "end": 1025 + "start": 1027, + "end": 1056 }, "expression": { "type": "Identifier", "span": { - "start": 996, - "end": 997 + "start": 1027, + "end": 1028 }, "ctxt": 0, "value": "i", @@ -1947,20 +1947,20 @@ "typeAnnotation": { "type": "TsConditionalType", "span": { - "start": 1001, - "end": 1025 + "start": 1032, + "end": 1056 }, "checkType": { "type": "TsTypeReference", "span": { - "start": 1001, - "end": 1002 + "start": 1032, + "end": 1033 }, "typeName": { "type": "Identifier", "span": { - "start": 1001, - "end": 1002 + "start": 1032, + "end": 1033 }, "ctxt": 0, "value": "T", @@ -1971,14 +1971,14 @@ "extendsType": { "type": "TsTypeReference", "span": { - "start": 1011, - "end": 1012 + "start": 1042, + "end": 1043 }, "typeName": { "type": "Identifier", "span": { - "start": 1011, - "end": 1012 + "start": 1042, + "end": 1043 }, "ctxt": 0, "value": "U", @@ -1989,14 +1989,14 @@ "trueType": { "type": "TsTypeReference", "span": { - "start": 1015, - "end": 1016 + "start": 1046, + "end": 1047 }, "typeName": { "type": "Identifier", "span": { - "start": 1015, - "end": 1016 + "start": 1046, + "end": 1047 }, "ctxt": 0, "value": "X", @@ -2007,8 +2007,8 @@ "falseType": { "type": "TsKeywordType", "span": { - "start": 1019, - "end": 1025 + "start": 1050, + "end": 1056 }, "kind": "string" } @@ -2017,8 +2017,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 1028, - "end": 1029 + "start": 1060, + "end": 1061 }, "value": 5.0, "raw": "5" @@ -2028,27 +2028,27 @@ { "type": "ExpressionStatement", "span": { - "start": 1031, - "end": 1063 + "start": 1063, + "end": 1096 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1031, - "end": 1062 + "start": 1063, + "end": 1095 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 1031, - "end": 1058 + "start": 1063, + "end": 1090 }, "expression": { "type": "Identifier", "span": { - "start": 1031, - "end": 1032 + "start": 1063, + "end": 1064 }, "ctxt": 0, "value": "i", @@ -2057,20 +2057,20 @@ "typeAnnotation": { "type": "TsConditionalType", "span": { - "start": 1036, - "end": 1058 + "start": 1068, + "end": 1090 }, "checkType": { "type": "TsTypeReference", "span": { - "start": 1036, - "end": 1037 + "start": 1068, + "end": 1069 }, "typeName": { "type": "Identifier", "span": { - "start": 1036, - "end": 1037 + "start": 1068, + "end": 1069 }, "ctxt": 0, "value": "T", @@ -2081,14 +2081,14 @@ "extendsType": { "type": "TsTypeReference", "span": { - "start": 1046, - "end": 1047 + "start": 1078, + "end": 1079 }, "typeName": { "type": "Identifier", "span": { - "start": 1046, - "end": 1047 + "start": 1078, + "end": 1079 }, "ctxt": 0, "value": "U", @@ -2099,14 +2099,14 @@ "trueType": { "type": "TsTypeReference", "span": { - "start": 1050, - "end": 1051 + "start": 1082, + "end": 1083 }, "typeName": { "type": "Identifier", "span": { - "start": 1050, - "end": 1051 + "start": 1082, + "end": 1083 }, "ctxt": 0, "value": "X", @@ -2117,14 +2117,14 @@ "falseType": { "type": "TsTypeReference", "span": { - "start": 1054, - "end": 1058 + "start": 1086, + "end": 1090 }, "typeName": { "type": "Identifier", "span": { - "start": 1054, - "end": 1055 + "start": 1086, + "end": 1087 }, "ctxt": 0, "value": "Y", @@ -2133,21 +2133,21 @@ "typeParams": { "type": "TsTypeParameterInstantiation", "span": { - "start": 1055, - "end": 1058 + "start": 1087, + "end": 1090 }, "params": [ { "type": "TsTypeReference", "span": { - "start": 1056, - "end": 1057 + "start": 1088, + "end": 1089 }, "typeName": { "type": "Identifier", "span": { - "start": 1056, - "end": 1057 + "start": 1088, + "end": 1089 }, "ctxt": 0, "value": "T", @@ -2163,8 +2163,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 1061, - "end": 1062 + "start": 1094, + "end": 1095 }, "value": 5.0, "raw": "5" @@ -2174,27 +2174,27 @@ { "type": "ExpressionStatement", "span": { - "start": 1096, - "end": 1127 + "start": 1129, + "end": 1161 }, "expression": { "type": "BinaryExpression", "span": { - "start": 1096, - "end": 1126 + "start": 1129, + "end": 1160 }, - "operator": "<", + "operator": ">=", "left": { "type": "TsAsExpression", "span": { - "start": 1096, - "end": 1122 + "start": 1129, + "end": 1155 }, "expression": { "type": "Identifier", "span": { - "start": 1096, - "end": 1097 + "start": 1129, + "end": 1130 }, "ctxt": 0, "value": "i", @@ -2203,21 +2203,21 @@ "typeAnnotation": { "type": "TsMappedType", "span": { - "start": 1101, - "end": 1122 + "start": 1134, + "end": 1155 }, "readonly": null, "typeParam": { "type": "TsTypeParameter", "span": { - "start": 1104, - "end": 1116 + "start": 1137, + "end": 1149 }, "name": { "type": "Identifier", "span": { - "start": 1104, - "end": 1105 + "start": 1137, + "end": 1138 }, "ctxt": 0, "value": "K", @@ -2229,21 +2229,21 @@ "constraint": { "type": "TsTypeOperator", "span": { - "start": 1109, - "end": 1116 + "start": 1142, + "end": 1149 }, "op": "keyof", "typeAnnotation": { "type": "TsTypeReference", "span": { - "start": 1115, - "end": 1116 + "start": 1148, + "end": 1149 }, "typeName": { "type": "Identifier", "span": { - "start": 1115, - "end": 1116 + "start": 1148, + "end": 1149 }, "ctxt": 0, "value": "T", @@ -2259,14 +2259,14 @@ "typeAnnotation": { "type": "TsTypeReference", "span": { - "start": 1119, - "end": 1120 + "start": 1152, + "end": 1153 }, "typeName": { "type": "Identifier", "span": { - "start": 1119, - "end": 1120 + "start": 1152, + "end": 1153 }, "ctxt": 0, "value": "V", @@ -2279,8 +2279,8 @@ "right": { "type": "NumericLiteral", "span": { - "start": 1125, - "end": 1126 + "start": 1159, + "end": 1160 }, "value": 5.0, "raw": "5" From 1cffbf29a98d9c31a2227be5eb01d226499c99f4 Mon Sep 17 00:00:00 2001 From: Steffen Heil | secforge Date: Sun, 9 Nov 2025 21:16:56 +0100 Subject: [PATCH 4/4] wip --- .../swc_ecma_lexer/src/common/parser/typescript.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/swc_ecma_lexer/src/common/parser/typescript.rs b/crates/swc_ecma_lexer/src/common/parser/typescript.rs index ae2dc5f458ed..31fa7959746f 100644 --- a/crates/swc_ecma_lexer/src/common/parser/typescript.rs +++ b/crates/swc_ecma_lexer/src/common/parser/typescript.rs @@ -931,12 +931,12 @@ pub(super) fn next_then_parse_ts_type<'a, P: Parser<'a>>(p: &mut P) -> PResult