diff --git a/test/run.js b/test/run.js index be1906d6a8..6642542090 100644 --- a/test/run.js +++ b/test/run.js @@ -6,6 +6,7 @@ require("./tests.js"); require("./tests-harmony.js"); require("./tests-jsx.js"); + require("./tests-flow.js"); require("./tests-6to5.js"); require("./tests-6to5-playground.js"); } else { diff --git a/test/tests-flow.js b/test/tests-flow.js new file mode 100644 index 0000000000..e263f2d73e --- /dev/null +++ b/test/tests-flow.js @@ -0,0 +1,10171 @@ +// React JSX tests + +var fbTestFixture = { + "Type Annotations": { + "function foo(numVal: any){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "numVal", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "AnyTypeAnnotation", + range: [21, 24], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 24 } + } + }, + range: [19, 24], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 24 } + } + }, + range: [13, 24], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 24 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [25, 27], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 27 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 27], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 27 } + } + }, + "function foo(numVal: number){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "numVal", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [21, 27], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 27 } + } + }, + range: [19, 27], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 27 } + } + }, + range: [13, 27], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 27 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [28, 30], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 30 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 30], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 30 } + } + }, + "function foo(numVal: number, strVal: string){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "numVal", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [21, 27], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 27 } + } + }, + range: [19, 27], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 27 } + } + }, + range: [13, 27], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 27 } + } + }, { + type: "Identifier", + name: "strVal", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "StringTypeAnnotation", + range: [37, 43], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 43 } + } + }, + range: [35, 43], + loc: { + start: { line: 1, column: 35 }, + end: { line: 1, column: 43 } + } + }, + range: [29, 43], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 43 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [44, 46], + loc: { + start: { line: 1, column: 44 }, + end: { line: 1, column: 46 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 46], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 46 } + } + }, + "function foo(numVal: number, untypedVal){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "numVal", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [21, 27], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 27 } + } + }, + range: [19, 27], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 27 } + } + }, + range: [13, 27], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 27 } + } + }, { + type: "Identifier", + name: "untypedVal", + range: [29, 39], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 39 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [40, 42], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 42 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 42], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 42 } + } + }, + "function foo(untypedVal, numVal: number){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "untypedVal", + range: [13, 23], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 23 } + } + }, { + type: "Identifier", + name: "numVal", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [33, 39], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 39 } + } + }, + range: [31, 39], + loc: { + start: { line: 1, column: 31 }, + end: { line: 1, column: 39 } + } + }, + range: [25, 39], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 39 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [40, 42], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 42 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 42], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 42 } + } + }, + "function foo(nullableNum: ?number){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "nullableNum", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NullableTypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [27, 33], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 33 } + } + }, + range: [26, 33], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 33 } + } + }, + range: [24, 33], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 33 } + } + }, + range: [13, 33], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 33 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [34, 36], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 36 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 36], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 36 } + } + }, + "function foo(callback: () => void){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "callback", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "VoidTypeAnnotation", + range: [29, 33], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 33 } + } + }, + rest: null, + typeParameters: null, + range: [23, 33], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 33 } + } + }, + range: [21, 33], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 33 } + } + }, + range: [13, 33], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 33 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [34, 36], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 36 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 36], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 36 } + } + }, + "function foo(callback: () => number){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "callback", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [29, 35], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 35 } + } + }, + rest: null, + typeParameters: null, + range: [23, 35], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 35 } + } + }, + range: [21, 35], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 35 } + } + }, + range: [13, 35], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 35 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [36, 38], + loc: { + start: { line: 1, column: 36 }, + end: { line: 1, column: 38 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 38], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 38 } + } + }, + "function foo(callback: (_:bool) => number){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "callback", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "_", + range: [24, 25], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 25 } + } + }, + typeAnnotation: { + type: "BooleanTypeAnnotation", + range: [26, 30], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 30 } + } + }, + optional: false, + range: [24, 30], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 30 } + } + }], + returnType: { + type: "NumberTypeAnnotation", + range: [35, 41], + loc: { + start: { line: 1, column: 35 }, + end: { line: 1, column: 41 } + } + }, + rest: null, + typeParameters: null, + range: [23, 41], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 41 } + } + }, + range: [21, 41], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 41 } + } + }, + range: [13, 41], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 41 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [42, 44], + loc: { + start: { line: 1, column: 42 }, + end: { line: 1, column: 44 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 44], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 44 } + } + }, + "function foo(callback: (_1:bool, _2:string) => number){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "callback", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "_1", + range: [24, 26], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 26 } + } + }, + typeAnnotation: { + type: "BooleanTypeAnnotation", + range: [27, 31], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 31 } + } + }, + optional: false, + range: [24, 31], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 31 } + } + }, { + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "_2", + range: [33, 35], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 35 } + } + }, + typeAnnotation: { + type: "StringTypeAnnotation", + range: [36, 42], + loc: { + start: { line: 1, column: 36 }, + end: { line: 1, column: 42 } + } + }, + optional: false, + range: [33, 42], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 42 } + } + }], + returnType: { + type: "NumberTypeAnnotation", + range: [47, 53], + loc: { + start: { line: 1, column: 47 }, + end: { line: 1, column: 53 } + } + }, + rest: null, + typeParameters: null, + range: [23, 53], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 53 } + } + }, + range: [21, 53], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 53 } + } + }, + range: [13, 53], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 53 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [54, 56], + loc: { + start: { line: 1, column: 54 }, + end: { line: 1, column: 56 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 56], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 56 } + } + }, + "function foo(callback: (_1:bool, ...foo:Array) => number){}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "callback", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "_1", + range: [24, 26], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 26 } + } + }, + typeAnnotation: { + type: "BooleanTypeAnnotation", + range: [27, 31], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 31 } + } + }, + optional: false, + range: [24, 31], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 31 } + } + }], + returnType: { + type: "NumberTypeAnnotation", + range: [58, 64], + loc: { + start: { line: 1, column: 58 }, + end: { line: 1, column: 64 } + } + }, + rest: { + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "foo", + range: [36, 39], + loc: { + start: { line: 1, column: 36 }, + end: { line: 1, column: 39 } + } + }, + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [40, 45], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 45 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "NumberTypeAnnotation", + range: [46, 52], + loc: { + start: { line: 1, column: 46 }, + end: { line: 1, column: 52 } + } + }], + range: [45, 53], + loc: { + start: { line: 1, column: 45 }, + end: { line: 1, column: 53 } + } + }, + range: [40, 53], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 53 } + } + }, + optional: false, + range: [36, 53], + loc: { + start: { line: 1, column: 36 }, + end: { line: 1, column: 53 } + } + }, + typeParameters: null, + range: [23, 64], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 64 } + } + }, + range: [21, 64], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 64 } + } + }, + range: [13, 64], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 64 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [65, 67], + loc: { + start: { line: 1, column: 65 }, + end: { line: 1, column: 67 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 67], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 67 } + } + }, + "function foo():number{}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [21, 23], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 23 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [15, 21], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 21 } + } + }, + range: [14, 21], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 21 } + } + }, + range: [0, 23], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 23 } + } + }, + "function foo():() => void{}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [25, 27], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 27 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "VoidTypeAnnotation", + range: [21, 25], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 25 } + } + }, + rest: null, + typeParameters: null, + range: [15, 25], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 25 } + } + }, + range: [14, 25], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 25 } + } + }, + range: [0, 27], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 27 } + } + }, + "function foo():(_:bool) => number{}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [33, 35], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 35 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "_", + range: [16, 17], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 17 } + } + }, + typeAnnotation: { + type: "BooleanTypeAnnotation", + range: [18, 22], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 22 } + } + }, + optional: false, + range: [16, 22], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 22 } + } + }], + returnType: { + type: "NumberTypeAnnotation", + range: [27, 33], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 33 } + } + }, + rest: null, + typeParameters: null, + range: [15, 33], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 33 } + } + }, + range: [14, 33], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 33 } + } + }, + range: [0, 35], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 35 } + } + }, + "function foo():(_?:bool) => number{}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [34, 36], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 36 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "_", + range: [16, 17], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 17 } + } + }, + typeAnnotation: { + type: "BooleanTypeAnnotation", + range: [19, 23], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 23 } + } + }, + optional: true, + range: [16, 23], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 23 } + } + }], + returnType: { + type: "NumberTypeAnnotation", + range: [28, 34], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 34 } + } + }, + rest: null, + typeParameters: null, + range: [15, 34], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 34 } + } + }, + range: [14, 34], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 34 } + } + }, + range: [0, 36], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 36 } + } + }, + "function foo(): {} {}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [19, 21], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 21 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [], + range: [16, 18], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 18 } + } + }, + range: [14, 18], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 18 } + } + }, + range: [0, 21], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 21 } + } + }, + "function foo() {}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [18, 20], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 20 } + } + }, + rest: null, + generator: false, + expression: false, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [13, 14], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 14 } + } + }], + range: [12, 15], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 15 } + } + }, + range: [0, 20], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 20 } + } + }, + "function foo() {}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [20, 22], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 22 } + } + }, + rest: null, + generator: false, + expression: false, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [13, 14], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 14 } + } + }, { + type: "Identifier", + name: "S", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }], + range: [12, 17], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 17 } + } + }, + range: [0, 22], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 22 } + } + }, + "a=function() {}": { + type: "ExpressionStatement", + expression: { + type: "AssignmentExpression", + operator: "=", + left: { + type: "Identifier", + name: "a", + range: [0, 1], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 1 } + } + }, + right: { + type: "FunctionExpression", + id: null, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [18, 20], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 20 } + } + }, + rest: null, + generator: false, + expression: false, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [11, 12], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 12 } + } + }, { + type: "Identifier", + name: "S", + range: [13, 14], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 14 } + } + }], + range: [10, 15], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 15 } + } + }, + range: [2, 20], + loc: { + start: { line: 1, column: 2 }, + end: { line: 1, column: 20 } + } + }, + range: [0, 20], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 20 } + } + }, + range: [0, 20], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 20 } + } + }, + "a={set fooProp(value:number){}}": { + type: "ExpressionStatement", + expression: { + type: "AssignmentExpression", + operator: "=", + left: { + type: "Identifier", + name: "a", + range: [0, 1], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 1 } + } + }, + right: { + type: "ObjectExpression", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "fooProp", + range: [7, 14], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [{ + type: "Identifier", + name: "value", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [21, 27], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 27 } + } + }, + range: [20, 27], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 27 } + } + }, + range: [15, 27], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 27 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [28, 30], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 30 } + } + }, + rest: null, + generator: false, + expression: false, + //range: [28, 30], + //loc: { + // start: { line: 1, column: 28 }, + // end: { line: 1, column: 30 } + //} + }, + kind: "set", + method: false, + shorthand: false, + computed: false, + range: [3, 30], + loc: { + start: { line: 1, column: 3 }, + end: { line: 1, column: 30 } + } + }], + range: [2, 31], + loc: { + start: { line: 1, column: 2 }, + end: { line: 1, column: 31 } + } + }, + range: [0, 31], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 31 } + } + }, + range: [0, 31], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 31 } + } + }, + "a={set fooProp(value:number):void{}}": { + type: "ExpressionStatement", + expression: { + type: "AssignmentExpression", + operator: "=", + left: { + type: "Identifier", + name: "a", + range: [0, 1], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 1 } + } + }, + right: { + type: "ObjectExpression", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "fooProp", + range: [7, 14], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [{ + type: "Identifier", + name: "value", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [21, 27], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 27 } + } + }, + range: [20, 27], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 27 } + } + }, + range: [15, 27], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 27 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [33, 35], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 35 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "VoidTypeAnnotation", + range: [29, 33], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 33 } + } + }, + range: [28, 33], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 33 } + } + }, + //range: [33, 35], + //loc: { + // start: { line: 1, column: 33 }, + // end: { line: 1, column: 35 } + //} + }, + kind: "set", + method: false, + shorthand: false, + computed: false, + range: [3, 35], + loc: { + start: { line: 1, column: 3 }, + end: { line: 1, column: 35 } + } + }], + range: [2, 36], + loc: { + start: { line: 1, column: 2 }, + end: { line: 1, column: 36 } + } + }, + range: [0, 36], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 36 } + } + }, + range: [0, 36], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 36 } + } + }, + "a={get fooProp():number{}}": { + type: "ExpressionStatement", + expression: { + type: "AssignmentExpression", + operator: "=", + left: { + type: "Identifier", + name: "a", + range: [0, 1], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 1 } + } + }, + right: { + type: "ObjectExpression", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "fooProp", + range: [7, 14], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [23, 25], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 25 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [17, 23], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 23 } + } + }, + range: [16, 23], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 23 } + } + }, + //range: [23, 25], + //loc: { + // start: { line: 1, column: 23 }, + // end: { line: 1, column: 25 } + //} + }, + kind: "get", + method: false, + shorthand: false, + computed: false, + range: [3, 25], + loc: { + start: { line: 1, column: 3 }, + end: { line: 1, column: 25 } + } + }], + range: [2, 26], + loc: { + start: { line: 1, column: 2 }, + end: { line: 1, column: 26 } + } + }, + range: [0, 26], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 26 } + } + }, + range: [0, 26], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 26 } + } + }, + "a={id(x: T): T {}}": { + type: "ExpressionStatement", + expression: { + type: "AssignmentExpression", + operator: "=", + left: { + type: "Identifier", + name: "a", + range: [0, 1], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 1 } + } + }, + right: { + type: "ObjectExpression", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "id", + range: [3, 5], + loc: { + start: { line: 1, column: 3 }, + end: { line: 1, column: 5 } + } + }, + value: { + type: "FunctionExpression", + //id: null, + params: [{ + type: "Identifier", + name: "x", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [12, 13], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 13 } + } + }, + typeParameters: null, + range: [12, 13], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 13 } + } + }, + range: [10, 13], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 13 } + } + }, + range: [9, 13], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 13 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [18, 20], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 20 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [16, 17], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 17 } + } + }, + typeParameters: null, + range: [16, 17], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 17 } + } + }, + range: [14, 17], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 17 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [6, 7], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 7 } + } + }], + range: [5, 8], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 8 } + } + }, + //range: [18, 20], + //loc: { + // start: { line: 1, column: 18 }, + // end: { line: 1, column: 20 } + //} + }, + kind: "init", + method: true, + shorthand: false, + computed: false, + range: [3, 20], + loc: { + start: { line: 1, column: 3 }, + end: { line: 1, column: 20 } + } + }], + range: [2, 21], + loc: { + start: { line: 1, column: 2 }, + end: { line: 1, column: 21 } + } + }, + range: [0, 21], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 21 } + } + }, + range: [0, 21], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 21 } + } + }, + "a={*id(x: T): T {}}": { + type: "ExpressionStatement", + expression: { + type: "AssignmentExpression", + operator: "=", + left: { + type: "Identifier", + name: "a", + range: [0, 1], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 1 } + } + }, + right: { + type: "ObjectExpression", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "id", + range: [4, 6], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 6 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [{ + type: "Identifier", + name: "x", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [13, 14], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 14 } + } + }, + typeParameters: null, + range: [13, 14], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 14 } + } + }, + range: [11, 14], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 14 } + } + }, + range: [10, 14], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 14 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [19, 21], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 21 } + } + }, + rest: null, + generator: true, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [17, 18], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 18 } + } + }, + typeParameters: null, + range: [17, 18], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 18 } + } + }, + range: [15, 18], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 18 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [7, 8], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 8 } + } + }], + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + //range: [19, 21], + //loc: { + // start: { line: 1, column: 19 }, + // end: { line: 1, column: 21 } + //} + }, + kind: "init", + method: true, + shorthand: false, + computed: false, + //range: [3, 21], + //loc: { + // start: { line: 1, column: 3 }, + // end: { line: 1, column: 21 } + //} + }], + range: [2, 22], + loc: { + start: { line: 1, column: 2 }, + end: { line: 1, column: 22 } + } + }, + range: [0, 22], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 22 } + } + }, + range: [0, 22], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 22 } + } + }, + "a={123(x: T): T {}}": { + type: "ExpressionStatement", + expression: { + type: "AssignmentExpression", + operator: "=", + left: { + type: "Identifier", + name: "a", + range: [0, 1], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 1 } + } + }, + right: { + type: "ObjectExpression", + properties: [{ + type: "Property", + key: { + type: "Literal", + value: 123, + raw: "123", + range: [3, 6], + loc: { + start: { line: 1, column: 3 }, + end: { line: 1, column: 6 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [{ + type: "Identifier", + name: "x", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [13, 14], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 14 } + } + }, + typeParameters: null, + range: [13, 14], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 14 } + } + }, + range: [11, 14], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 14 } + } + }, + range: [10, 14], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 14 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [19, 21], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 21 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [17, 18], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 18 } + } + }, + typeParameters: null, + range: [17, 18], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 18 } + } + }, + range: [15, 18], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 18 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [7, 8], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 8 } + } + }], + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + //range: [19, 21], + //loc: { + // start: { line: 1, column: 19 }, + // end: { line: 1, column: 21 } + //} + }, + kind: "init", + method: true, + shorthand: false, + computed: false, + range: [3, 21], + loc: { + start: { line: 1, column: 3 }, + end: { line: 1, column: 21 } + } + }], + range: [2, 22], + loc: { + start: { line: 1, column: 2 }, + end: { line: 1, column: 22 } + } + }, + range: [0, 22], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 22 } + } + }, + range: [0, 22], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 22 } + } + }, + "class Foo {set fooProp(value:number){}}": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [{ + type: "MethodDefinition", + key: { + type: "Identifier", + name: "fooProp", + range: [15, 22], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 22 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [{ + type: "Identifier", + name: "value", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [29, 35], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 35 } + } + }, + range: [28, 35], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 35 } + } + }, + range: [23, 35], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 35 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [36, 38], + loc: { + start: { line: 1, column: 36 }, + end: { line: 1, column: 38 } + } + }, + rest: null, + generator: false, + expression: false, + //range: [36, 38], + //loc: { + // start: { line: 1, column: 36 }, + // end: { line: 1, column: 38 } + //} + }, + kind: "set", + "static": false, + computed: false, + range: [11, 38], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 38 } + } + }], + range: [10, 39], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 39 } + } + }, + range: [0, 39], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 39 } + } + }, + "class Foo {set fooProp(value:number):void{}}": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [{ + type: "MethodDefinition", + key: { + type: "Identifier", + name: "fooProp", + range: [15, 22], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 22 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [{ + type: "Identifier", + name: "value", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [29, 35], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 35 } + } + }, + range: [28, 35], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 35 } + } + }, + range: [23, 35], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 35 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [41, 43], + loc: { + start: { line: 1, column: 41 }, + end: { line: 1, column: 43 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "VoidTypeAnnotation", + range: [37, 41], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 41 } + } + }, + range: [36, 41], + loc: { + start: { line: 1, column: 36 }, + end: { line: 1, column: 41 } + } + }, + //range: [41, 43], + //loc: { + // start: { line: 1, column: 41 }, + // end: { line: 1, column: 43 } + //} + }, + kind: "set", + "static": false, + computed: false, + range: [11, 43], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 43 } + } + }], + range: [10, 44], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 44 } + } + }, + range: [0, 44], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 44 } + } + }, + "class Foo {get fooProp():number{}}": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [{ + type: "MethodDefinition", + key: { + type: "Identifier", + name: "fooProp", + range: [15, 22], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 22 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [31, 33], + loc: { + start: { line: 1, column: 31 }, + end: { line: 1, column: 33 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [25, 31], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 31 } + } + }, + range: [24, 31], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 31 } + } + }, + //range: [31, 33], + //loc: { + // start: { line: 1, column: 31 }, + // end: { line: 1, column: 33 } + //} + }, + kind: "get", + "static": false, + computed: false, + range: [11, 33], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 33 } + } + }], + range: [10, 34], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 34 } + } + }, + range: [0, 34], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 34 } + } + }, + "var numVal:number;": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "numVal", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [11, 17], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 17 } + } + }, + range: [10, 17], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 17 } + } + }, + range: [4, 17], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 17 } + } + }, + init: null, + range: [4, 17], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 17 } + } + }], + kind: "var", + range: [0, 18], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 18 } + } + }, + "var numVal:number = otherNumVal;": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "numVal", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [11, 17], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 17 } + } + }, + range: [10, 17], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 17 } + } + }, + range: [4, 17], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 17 } + } + }, + init: { + type: "Identifier", + name: "otherNumVal", + range: [20, 31], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 31 } + } + }, + range: [4, 31], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 31 } + } + }], + kind: "var", + range: [0, 32], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 32 } + } + }, + "var a: {numVal: number};": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "numVal", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [16, 22], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 22 } + } + }, + optional: false, + range: [8, 22], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 22 } + } + }], + indexers: [], + callProperties: [], + range: [7, 23], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 23 } + } + }, + range: [5, 23], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 23 } + } + }, + range: [4, 23], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 23 } + } + }, + init: null, + range: [4, 23], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 23 } + } + }], + kind: "var", + range: [0, 24], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 24 } + } + }, + "var a: {numVal: number;};": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "numVal", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [16, 22], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 22 } + } + }, + optional: false, + range: [8, 22], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 22 } + } + }], + indexers: [], + callProperties: [], + range: [7, 24], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 24 } + } + }, + range: [5, 24], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 24 } + } + }, + range: [4, 24], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 24 } + } + }, + init: null, + range: [4, 24], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 24 } + } + }], + kind: "var", + range: [0, 25], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 25 } + } + }, + "var a: {numVal: number; [indexer: string]: number};": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "numVal", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [16, 22], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 22 } + } + }, + optional: false, + range: [8, 22], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 22 } + } + }], + indexers: [{ + type: "ObjectTypeIndexer", + id: { + type: "Identifier", + name: "indexer", + range: [25, 32], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 32 } + } + }, + key: { + type: "StringTypeAnnotation", + range: [34, 40], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 40 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [43, 49], + loc: { + start: { line: 1, column: 43 }, + end: { line: 1, column: 49 } + } + }, + range: [24, 49], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 49 } + } + }], + callProperties: [], + range: [7, 50], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 50 } + } + }, + range: [5, 50], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 50 } + } + }, + range: [4, 50], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 50 } + } + }, + init: null, + range: [4, 50], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 50 } + } + }], + kind: "var", + range: [0, 51], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 51 } + } + }, + "var a: ?{numVal: number};": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NullableTypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "numVal", + range: [9, 15], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 15 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [17, 23], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 23 } + } + }, + optional: false, + range: [9, 23], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 23 } + } + }], + indexers: [], + callProperties: [], + range: [8, 24], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 24 } + } + }, + range: [7, 24], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 24 } + } + }, + range: [5, 24], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 24 } + } + }, + range: [4, 24], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 24 } + } + }, + init: null, + range: [4, 24], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 24 } + } + }], + kind: "var", + range: [0, 25], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 25 } + } + }, + "var a: {numVal: number; strVal: string}": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "numVal", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [16, 22], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 22 } + } + }, + optional: false, + range: [8, 22], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 22 } + } + }, { + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "strVal", + range: [24, 30], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 30 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [32, 38], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 38 } + } + }, + optional: false, + range: [24, 38], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 38 } + } + }], + indexers: [], + callProperties: [], + range: [7, 39], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 39 } + } + }, + range: [5, 39], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 39 } + } + }, + range: [4, 39], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 39 } + } + }, + init: null, + range: [4, 39], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 39 } + } + }], + kind: "var", + range: [0, 39], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 39 } + } + }, + "var a: {subObj: {strVal: string}}": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "subObj", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "strVal", + range: [17, 23], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 23 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [25, 31], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 31 } + } + }, + optional: false, + range: [17, 31], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 31 } + } + }], + indexers: [], + callProperties: [], + range: [16, 32], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 32 } + } + }, + optional: false, + range: [8, 32], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 32 } + } + }], + indexers: [], + callProperties: [], + range: [7, 33], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 33 } + } + }, + range: [5, 33], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 33 } + } + }, + range: [4, 33], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 33 } + } + }, + init: null, + range: [4, 33], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 33 } + } + }], + kind: "var", + range: [0, 33], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 33 } + } + }, + "var a: {subObj: ?{strVal: string}}": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "subObj", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "NullableTypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "strVal", + range: [18, 24], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 24 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [26, 32], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 32 } + } + }, + optional: false, + range: [18, 32], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 32 } + } + }], + indexers: [], + callProperties: [], + range: [17, 33], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 33 } + } + }, + range: [16, 33], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 33 } + } + }, + optional: false, + range: [8, 33], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 33 } + } + }], + indexers: [], + callProperties: [], + range: [7, 34], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 34 } + } + }, + range: [5, 34], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 34 } + } + }, + range: [4, 34], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 34 } + } + }, + init: null, + range: [4, 34], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 34 } + } + }], + kind: "var", + range: [0, 34], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 34 } + } + }, + "var a: {param1: number; param2: string}": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "param1", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [16, 22], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 22 } + } + }, + optional: false, + range: [8, 22], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 22 } + } + }, { + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "param2", + range: [24, 30], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 30 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [32, 38], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 38 } + } + }, + optional: false, + range: [24, 38], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 38 } + } + }], + indexers: [], + callProperties: [], + range: [7, 39], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 39 } + } + }, + range: [5, 39], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 39 } + } + }, + range: [4, 39], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 39 } + } + }, + init: null, + range: [4, 39], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 39 } + } + }], + kind: "var", + range: [0, 39], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 39 } + } + }, + "var a: {param1: number; param2?: string}": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "param1", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [16, 22], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 22 } + } + }, + optional: false, + range: [8, 22], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 22 } + } + }, { + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "param2", + range: [24, 30], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 30 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [33, 39], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 39 } + } + }, + optional: true, + range: [24, 39], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 39 } + } + }], + indexers: [], + callProperties: [], + range: [7, 40], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 40 } + } + }, + range: [5, 40], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 40 } + } + }, + range: [4, 40], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 40 } + } + }, + init: null, + range: [4, 40], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 40 } + } + }], + kind: "var", + range: [0, 40], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 40 } + } + }, + "var a: {add(x:number, ...y:Array): void}": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "add", + range: [8, 11], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 11 } + } + }, + value: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "x", + range: [12, 13], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 13 } + } + }, + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, + optional: false, + range: [12, 20], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 20 } + } + }], + returnType: { + type: "VoidTypeAnnotation", + range: [43, 47], + loc: { + start: { line: 1, column: 43 }, + end: { line: 1, column: 47 } + } + }, + rest: { + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "y", + range: [25, 26], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 26 } + } + }, + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [27, 32], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 32 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "StringTypeAnnotation", + range: [33, 39], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 39 } + } + }], + range: [32, 40], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 40 } + } + }, + range: [27, 40], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 40 } + } + }, + optional: false, + range: [25, 40], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 40 } + } + }, + typeParameters: null, + range: [8, 47], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 47 } + } + }, + optional: false, + range: [8, 47], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 47 } + } + }], + indexers: [], + callProperties: [], + range: [7, 48], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 48 } + } + }, + range: [5, 48], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 48 } + } + }, + range: [4, 48], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 48 } + } + }, + init: null, + range: [4, 48], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 48 } + } + }], + kind: "var", + range: [0, 48], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 48 } + } + }, + "var a: { id(x: T): T; }": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "id", + range: [9, 11], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 11 } + } + }, + value: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "x", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }, + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [18, 19], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 19 } + } + }, + typeParameters: null, + range: [18, 19], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 19 } + } + }, + optional: false, + range: [15, 19], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 19 } + } + }], + returnType: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [22, 23], + loc: { + start: { line: 1, column: 22 }, + end: { line: 1, column: 23 } + } + }, + typeParameters: null, + range: [22, 23], + loc: { + start: { line: 1, column: 22 }, + end: { line: 1, column: 23 } + } + }, + rest: null, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [12, 13], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 13 } + } + }], + range: [11, 14], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 14 } + } + }, + range: [9, 23], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 23 } + } + }, + optional: false, + range: [9, 23], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 23 } + } + }], + indexers: [], + callProperties: [], + range: [7, 26], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 26 } + } + }, + range: [5, 26], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 26 } + } + }, + range: [4, 26], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 26 } + } + }, + init: null, + range: [4, 26], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 26 } + } + }], + kind: "var", + range: [0, 26], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 26 } + } + }, + "var a:Array = [1, 2, 3]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [6, 11], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 11 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "NumberTypeAnnotation", + range: [12, 18], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 18 } + } + }], + range: [11, 19], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 19 } + } + }, + range: [6, 19], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 19 } + } + }, + range: [5, 19], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 19 } + } + }, + range: [4, 19], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 19 } + } + }, + init: { + type: "ArrayExpression", + elements: [{ + type: "Literal", + value: 1, + raw: "1", + range: [23, 24], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 24 } + } + }, { + type: "Literal", + value: 2, + raw: "2", + range: [26, 27], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 27 } + } + }, { + type: "Literal", + value: 3, + raw: "3", + range: [29, 30], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 30 } + } + }], + range: [22, 31], + loc: { + start: { line: 1, column: 22 }, + end: { line: 1, column: 31 } + } + }, + range: [4, 31], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 31 } + } + }], + kind: "var", + range: [0, 31], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 31 } + } + }, + "a = class Foo { }": { + type: "ExpressionStatement", + expression: { + type: "AssignmentExpression", + operator: "=", + left: { + type: "Identifier", + name: "a", + range: [0, 1], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 1 } + } + }, + right: { + type: "ClassExpression", + id: { + type: "Identifier", + name: "Foo", + range: [10, 13], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 13 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [], + range: [17, 20], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 20 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }], + range: [13, 16], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 16 } + } + }, + range: [4, 20], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 20 } + } + }, + range: [0, 20], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 20 } + } + }, + range: [0, 20], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 20 } + } + }, + "a = class Foo extends Bar { }": { + type: "ExpressionStatement", + expression: { + type: "AssignmentExpression", + operator: "=", + left: { + type: "Identifier", + name: "a", + range: [0, 1], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 1 } + } + }, + right: { + type: "ClassExpression", + id: { + type: "Identifier", + name: "Foo", + range: [10, 13], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 13 } + } + }, + superClass: { + type: "Identifier", + name: "Bar", + range: [25, 28], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 28 } + } + }, + body: { + type: "ClassBody", + body: [], + range: [32, 35], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 35 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }], + range: [13, 16], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 16 } + } + }, + superTypeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [29, 30], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 30 } + } + }, + typeParameters: null, + range: [29, 30], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 30 } + } + }], + range: [28, 31], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 31 } + } + }, + range: [4, 35], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 35 } + } + }, + range: [0, 35], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 35 } + } + }, + range: [0, 35], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 35 } + } + }, + "class Foo {}": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [], + range: [13, 15], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 15 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }], + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + range: [0, 15], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 15 } + } + }, + "class Foo extends Bar { }": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: { + type: "Identifier", + name: "Bar", + range: [21, 24], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 24 } + } + }, + body: { + type: "ClassBody", + body: [], + range: [28, 31], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 31 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }], + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + superTypeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [25, 26], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 26 } + } + }, + typeParameters: null, + range: [25, 26], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 26 } + } + }], + range: [24, 27], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 27 } + } + }, + range: [0, 31], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 31 } + } + }, + "class Foo extends mixin(Bar) { }": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: { + type: "CallExpression", + callee: { + type: "Identifier", + name: "mixin", + range: [21, 26], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 26 } + } + }, + "arguments": [{ + type: "Identifier", + name: "Bar", + range: [27, 30], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 30 } + } + }], + range: [21, 31], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 31 } + } + }, + body: { + type: "ClassBody", + body: [], + range: [32, 35], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 35 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }], + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + range: [0, 35], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 35 } + } + }, + "class Foo { bar():number { return 42; }}": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [{ + type: "MethodDefinition", + key: { + type: "Identifier", + name: "bar", + range: [15, 18], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 18 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [{ + type: "ReturnStatement", + argument: { + type: "Literal", + value: 42, + raw: "42", + range: [40, 42], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 42 } + } + }, + range: [33, 43], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 43 } + } + }], + range: [31, 45], + loc: { + start: { line: 1, column: 31 }, + end: { line: 1, column: 45 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [24, 30], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 30 } + } + }, + range: [23, 30], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 30 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "U", + range: [19, 20], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 20 } + } + }], + range: [18, 21], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 21 } + } + }, + //range: [31, 45], + //loc: { + // start: { line: 1, column: 31 }, + // end: { line: 1, column: 45 } + //} + }, + kind: "", + "static": false, + computed: false, + range: [15, 45], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 45 } + } + }], + range: [13, 46], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 46 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }], + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + range: [0, 46], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 46 } + } + }, + 'class Foo { "bar"() { } }': { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [{ + type: "MethodDefinition", + key: { + type: "Literal", + value: "bar", + raw: '"bar"', + range: [12, 17], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 17 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [23, 26], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 26 } + } + }, + rest: null, + generator: false, + expression: false, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [18, 19], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 19 } + } + }], + range: [17, 20], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 20 } + } + }, + //range: [23, 26], + //loc: { + // start: { line: 1, column: 23 }, + // end: { line: 1, column: 26 } + //} + }, + kind: "", + "static": false, + computed: false, + range: [12, 26], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 26 } + } + }], + range: [10, 28], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 28 } + } + }, + range: [0, 28], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 28 } + } + }, + "function foo(requiredParam, optParam?) {}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "Identifier", + name: "requiredParam", + range: [13, 26], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 26 } + } + }, { + type: "Identifier", + name: "optParam", + optional: true, + range: [28, 37], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 37 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [39, 41], + loc: { + start: { line: 1, column: 39 }, + end: { line: 1, column: 41 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 41], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 41 } + } + }, + "class Foo { prop1:string; prop2:number; }": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [{ + type: "ClassProperty", + key: { + type: "Identifier", + name: "prop1", + range: [12, 17], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 17 } + } + }, + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "StringTypeAnnotation", + range: [18, 24], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 24 } + } + }, + range: [17, 24], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 24 } + } + }, + computed: false, + "static": false, + range: [12, 25], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 25 } + } + }, { + type: "ClassProperty", + key: { + type: "Identifier", + name: "prop2", + range: [26, 31], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 31 } + } + }, + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [32, 38], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 38 } + } + }, + range: [31, 38], + loc: { + start: { line: 1, column: 31 }, + end: { line: 1, column: 38 } + } + }, + computed: false, + "static": false, + range: [26, 39], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 39 } + } + }], + range: [10, 41], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 41 } + } + }, + range: [0, 41], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 41 } + } + }, + "class Foo { static prop1:string; prop2:number; }": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [{ + type: "ClassProperty", + key: { + type: "Identifier", + name: "prop1", + range: [19, 24], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 24 } + } + }, + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "StringTypeAnnotation", + range: [25, 31], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 31 } + } + }, + range: [24, 31], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 31 } + } + }, + computed: false, + "static": true, + range: [12, 32], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 32 } + } + }, { + type: "ClassProperty", + key: { + type: "Identifier", + name: "prop2", + range: [33, 38], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 38 } + } + }, + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [39, 45], + loc: { + start: { line: 1, column: 39 }, + end: { line: 1, column: 45 } + } + }, + range: [38, 45], + loc: { + start: { line: 1, column: 38 }, + end: { line: 1, column: 45 } + } + }, + computed: false, + "static": false, + range: [33, 46], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 46 } + } + }], + range: [10, 48], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 48 } + } + }, + range: [0, 48], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 48 } + } + }, + "var x : number | string = 4;": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "x", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "UnionTypeAnnotation", + types: [{ + type: "NumberTypeAnnotation", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, { + type: "StringTypeAnnotation", + range: [17, 23], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 23 } + } + }], + range: [8, 23], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 23 } + } + }, + range: [6, 23], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 23 } + } + }, + range: [4, 23], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 23 } + } + }, + init: { + type: "Literal", + value: 4, + raw: "4", + range: [26, 27], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 27 } + } + }, + range: [4, 27], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 27 } + } + }], + kind: "var", + range: [0, 28], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 28 } + } + }, + "class Array { concat(items:number | string) {}; }": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Array", + range: [6, 11], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 11 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [{ + type: "MethodDefinition", + key: { + type: "Identifier", + name: "concat", + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, + value: { + type: "FunctionExpression", + id: null, + params: [{ + type: "Identifier", + name: "items", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "UnionTypeAnnotation", + types: [{ + type: "NumberTypeAnnotation", + range: [27, 33], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 33 } + } + }, { + type: "StringTypeAnnotation", + range: [36, 42], + loc: { + start: { line: 1, column: 36 }, + end: { line: 1, column: 42 } + } + }], + range: [27, 42], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 42 } + } + }, + range: [26, 42], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 42 } + } + }, + range: [21, 42], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 42 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [44, 46], + loc: { + start: { line: 1, column: 44 }, + end: { line: 1, column: 46 } + } + }, + rest: null, + generator: false, + expression: false, + //range: [44, 46], + //loc: { + // start: { line: 1, column: 44 }, + // end: { line: 1, column: 46 } + //} + }, + kind: "", + "static": false, + computed: false, + range: [14, 46], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 46 } + } + }], + range: [12, 49], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 49 } + } + }, + range: [0, 49], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 49 } + } + }, + "var x : () => number | () => string = fn;": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "x", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "UnionTypeAnnotation", + types: [{ + type: "NumberTypeAnnotation", + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "StringTypeAnnotation", + range: [29, 35], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 35 } + } + }, + rest: null, + typeParameters: null, + range: [23, 35], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 35 } + } + }], + range: [14, 35], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 35 } + } + }, + rest: null, + typeParameters: null, + range: [8, 35], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 35 } + } + }, + range: [6, 35], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 35 } + } + }, + range: [4, 35], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 35 } + } + }, + init: { + type: "Identifier", + name: "fn", + range: [38, 40], + loc: { + start: { line: 1, column: 38 }, + end: { line: 1, column: 40 } + } + }, + range: [4, 40], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 40 } + } + }], + kind: "var", + range: [0, 41], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 41 } + } + }, + "var x: typeof Y = Y;": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "x", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "TypeofTypeAnnotation", + argument: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Y", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + typeParameters: null, + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + range: [7, 15], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 15 } + } + }, + range: [5, 15], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 15 } + } + }, + range: [4, 15], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 15 } + } + }, + init: { + type: "Identifier", + name: "Y", + range: [18, 19], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 19 } + } + }, + range: [4, 19], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 19 } + } + }], + kind: "var", + range: [0, 20], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 20 } + } + }, + "var x: typeof Y | number = Y;": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "x", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "UnionTypeAnnotation", + types: [{ + type: "TypeofTypeAnnotation", + argument: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Y", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + typeParameters: null, + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + range: [7, 15], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 15 } + } + }, { + type: "NumberTypeAnnotation", + range: [18, 24], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 24 } + } + }], + range: [7, 24], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 24 } + } + }, + range: [5, 24], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 24 } + } + }, + range: [4, 24], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 24 } + } + }, + init: { + type: "Identifier", + name: "Y", + range: [27, 28], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 28 } + } + }, + range: [4, 28], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 28 } + } + }], + kind: "var", + range: [0, 29], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 29 } + } + }, + 'var {x}: {x: string; } = { x: "hello" };': { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "ObjectPattern", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "x", + range: [5, 6], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 6 } + } + }, + value: { + type: "Identifier", + name: "x", + range: [5, 6], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 6 } + } + }, + kind: "init", + method: false, + shorthand: true, + computed: false, + range: [5, 6], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 6 } + } + }], + range: [4, 22], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 22 } + }, + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "x", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [13, 19], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 19 } + } + }, + optional: false, + range: [10, 19], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 19 } + } + }], + indexers: [], + callProperties: [], + range: [9, 22], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 22 } + } + }, + range: [7, 22], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 22 } + } + } + }, + init: { + type: "ObjectExpression", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "x", + range: [27, 28], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 28 } + } + }, + value: { + type: "Literal", + value: "hello", + raw: '"hello"', + range: [30, 37], + loc: { + start: { line: 1, column: 30 }, + end: { line: 1, column: 37 } + } + }, + kind: "init", + method: false, + shorthand: false, + computed: false, + range: [27, 37], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 37 } + } + }], + range: [25, 39], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 39 } + } + }, + range: [4, 39], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 39 } + } + }], + kind: "var", + range: [0, 40], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 40 } + } + }, + 'var {x}: {x: string } = { x: "hello" };': { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "ObjectPattern", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "x", + range: [5, 6], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 6 } + } + }, + value: { + type: "Identifier", + name: "x", + range: [5, 6], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 6 } + } + }, + kind: "init", + method: false, + shorthand: true, + computed: false, + range: [5, 6], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 6 } + } + }], + range: [4, 21], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 21 } + }, + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "x", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [13, 19], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 19 } + } + }, + optional: false, + range: [10, 19], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 19 } + } + }], + indexers: [], + callProperties: [], + range: [9, 21], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 21 } + } + }, + range: [7, 21], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 21 } + } + } + }, + init: { + type: "ObjectExpression", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "x", + range: [26, 27], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 27 } + } + }, + value: { + type: "Literal", + value: "hello", + raw: '"hello"', + range: [29, 36], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 36 } + } + }, + kind: "init", + method: false, + shorthand: false, + computed: false, + range: [26, 36], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 36 } + } + }], + range: [24, 38], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 38 } + } + }, + range: [4, 38], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 38 } + } + }], + kind: "var", + range: [0, 39], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 39 } + } + }, + 'var [x]: Array = [ "hello" ];': { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "ArrayPattern", + elements: [{ + type: "Identifier", + name: "x", + range: [5, 6], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 6 } + } + }], + range: [4, 22], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 22 } + }, + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [9, 14], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 14 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "StringTypeAnnotation", + range: [15, 21], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 21 } + } + }], + range: [14, 22], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 22 } + } + }, + range: [9, 22], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 22 } + } + }, + range: [7, 22], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 22 } + } + } + }, + init: { + type: "ArrayExpression", + elements: [{ + type: "Literal", + value: "hello", + raw: '"hello"', + range: [27, 34], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 34 } + } + }], + range: [25, 36], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 36 } + } + }, + range: [4, 36], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 36 } + } + }], + kind: "var", + range: [0, 37], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 37 } + } + }, + "function foo({x}: { x: string; }) {}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "ObjectPattern", + properties: [{ + type: "Property", + key: { + type: "Identifier", + name: "x", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + value: { + type: "Identifier", + name: "x", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + kind: "init", + method: false, + shorthand: true, + computed: false, + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }], + range: [13, 32], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 32 } + }, + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "x", + range: [20, 21], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 21 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [23, 29], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 29 } + } + }, + optional: false, + range: [20, 29], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 29 } + } + }], + indexers: [], + callProperties: [], + range: [18, 32], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 32 } + } + }, + range: [16, 32], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 32 } + } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [34, 36], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 36 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 36], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 36 } + } + }, + "function foo([x]: Array) {}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [{ + type: "ArrayPattern", + elements: [{ + type: "Identifier", + name: "x", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }], + range: [13, 31], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 31 } + }, + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [18, 23], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 23 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "StringTypeAnnotation", + range: [24, 30], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 30 } + } + }], + range: [23, 31], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 31 } + } + }, + range: [18, 31], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 31 } + } + }, + range: [16, 31], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 31 } + } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [33, 35], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 35 } + } + }, + rest: null, + generator: false, + expression: false, + range: [0, 35], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 35 } + } + }, + "function foo(...rest: Array) {}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [37, 39], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 39 } + } + }, + rest: { + type: "Identifier", + name: "rest", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [22, 27], + loc: { + start: { line: 1, column: 22 }, + end: { line: 1, column: 27 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "NumberTypeAnnotation", + range: [28, 34], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 34 } + } + }], + range: [27, 35], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 35 } + } + }, + range: [22, 35], + loc: { + start: { line: 1, column: 22 }, + end: { line: 1, column: 35 } + } + }, + range: [20, 35], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 35 } + } + }, + range: [16, 35], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 35 } + } + }, + generator: false, + expression: false, + range: [0, 39], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 39 } + } + }, + "(function (...rest: Array) {})": { + type: "ExpressionStatement", + expression: { + type: "FunctionExpression", + id: null, + params: [], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [35, 37], + loc: { + start: { line: 1, column: 35 }, + end: { line: 1, column: 37 } + } + }, + rest: { + type: "Identifier", + name: "rest", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [20, 25], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 25 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "NumberTypeAnnotation", + range: [26, 32], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 32 } + } + }], + range: [25, 33], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 33 } + } + }, + range: [20, 33], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 33 } + } + }, + range: [18, 33], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 33 } + } + }, + range: [14, 33], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 33 } + } + }, + generator: false, + expression: false, + range: [1, 37], + loc: { + start: { line: 1, column: 1 }, + end: { line: 1, column: 37 } + } + }, + range: [0, 38], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 38 } + } + }, + "((...rest: Array) => rest)": { + type: "ExpressionStatement", + expression: { + type: "ArrowFunctionExpression", + id: null, + params: [], + defaults: [], + body: { + type: "Identifier", + name: "rest", + range: [29, 33], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 33 } + } + }, + rest: { + type: "Identifier", + name: "rest", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [11, 16], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 16 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "NumberTypeAnnotation", + range: [17, 23], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 23 } + } + }], + range: [16, 24], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 24 } + } + }, + range: [11, 24], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 24 } + } + }, + range: [9, 24], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 24 } + } + }, + range: [5, 24], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 24 } + } + }, + generator: false, + expression: true, + range: [1, 33], + loc: { + start: { line: 1, column: 1 }, + end: { line: 1, column: 33 } + } + }, + range: [0, 34], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 34 } + } + }, + "var a: Map >": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Map", + range: [7, 10], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 10 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "StringTypeAnnotation", + range: [11, 17], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 17 } + } + }, { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [19, 24], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 24 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "StringTypeAnnotation", + range: [25, 31], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 31 } + } + }], + range: [24, 32], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 32 } + } + }, + range: [19, 32], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 32 } + } + }], + range: [10, 34], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 34 } + } + }, + range: [7, 34], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 34 } + } + }, + range: [5, 34], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 34 } + } + }, + range: [4, 34], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 34 } + } + }, + init: null, + range: [4, 34], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 34 } + } + }], + kind: "var", + range: [0, 34], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 34 } + } + }, + "var a: Map>": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Map", + range: [7, 10], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 10 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "StringTypeAnnotation", + range: [11, 17], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 17 } + } + }, { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [19, 24], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 24 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "StringTypeAnnotation", + range: [25, 31], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 31 } + } + }], + range: [24, 32], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 32 } + } + }, + range: [19, 32], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 32 } + } + }], + range: [10, 33], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 33 } + } + }, + range: [7, 33], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 33 } + } + }, + range: [5, 33], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 33 } + } + }, + range: [4, 33], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 33 } + } + }, + init: null, + range: [4, 33], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 33 } + } + }], + kind: "var", + range: [0, 33], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 33 } + } + }, + "var a: number[]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ArrayTypeAnnotation", + elementType: { + type: "NumberTypeAnnotation", + range: [7, 13], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 13 } + } + }, + range: [7, 15], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 15 } + } + }, + range: [5, 15], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 15 } + } + }, + range: [4, 15], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 15 } + } + }, + init: null, + range: [4, 15], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 15 } + } + }], + kind: "var", + range: [0, 15], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 15 } + } + }, + "var a: ?string[]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NullableTypeAnnotation", + typeAnnotation: { + type: "ArrayTypeAnnotation", + elementType: { + type: "StringTypeAnnotation", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + range: [8, 16], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 16 } + } + }, + range: [7, 16], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 16 } + } + }, + range: [5, 16], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 16 } + } + }, + range: [4, 16], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 16 } + } + }, + init: null, + range: [4, 16], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 16 } + } + }], + kind: "var", + range: [0, 16], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 16 } + } + }, + "var a: Promise[]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ArrayTypeAnnotation", + elementType: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Promise", + range: [7, 14], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 14 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "BooleanTypeAnnotation", + range: [15, 19], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 19 } + } + }], + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, + range: [7, 20], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 20 } + } + }, + range: [7, 22], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 22 } + } + }, + range: [5, 22], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 22 } + } + }, + range: [4, 22], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 22 } + } + }, + init: null, + range: [4, 22], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 22 } + } + }], + kind: "var", + range: [0, 22], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 22 } + } + }, + "var a:(...rest:Array) => number": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [33, 39], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 39 } + } + }, + rest: { + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "rest", + range: [10, 14], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 14 } + } + }, + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Array", + range: [15, 20], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 20 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "NumberTypeAnnotation", + range: [21, 27], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 27 } + } + }], + range: [20, 28], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 28 } + } + }, + range: [15, 28], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 28 } + } + }, + optional: false, + range: [10, 28], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 28 } + } + }, + typeParameters: null, + range: [6, 39], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 39 } + } + }, + range: [5, 39], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 39 } + } + }, + range: [4, 39], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 39 } + } + }, + init: null, + range: [4, 39], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 39 } + } + }], + kind: "var", + range: [0, 39], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 39 } + } + }, + "var identity: (x: T) => T": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "identity", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "x", + range: [18, 19], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 19 } + } + }, + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [21, 22], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 22 } + } + }, + typeParameters: null, + range: [21, 22], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 22 } + } + }, + optional: false, + range: [18, 22], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 22 } + } + }], + returnType: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [27, 28], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 28 } + } + }, + typeParameters: null, + range: [27, 28], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 28 } + } + }, + rest: null, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }], + range: [14, 17], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 17 } + } + }, + range: [14, 28], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 28 } + } + }, + range: [12, 28], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 28 } + } + }, + range: [4, 28], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 28 } + } + }, + init: null, + range: [4, 28], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 28 } + } + }], + kind: "var", + range: [0, 28], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 28 } + } + }, + "var identity: (x: T, ...y:T[]) => T": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "identity", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "x", + range: [18, 19], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 19 } + } + }, + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [21, 22], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 22 } + } + }, + typeParameters: null, + range: [21, 22], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 22 } + } + }, + optional: false, + range: [18, 22], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 22 } + } + }], + returnType: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [37, 38], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 38 } + } + }, + typeParameters: null, + range: [37, 38], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 38 } + } + }, + rest: { + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "y", + range: [27, 28], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 28 } + } + }, + typeAnnotation: { + type: "ArrayTypeAnnotation", + elementType: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [29, 30], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 30 } + } + }, + typeParameters: null, + range: [29, 30], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 30 } + } + }, + range: [29, 32], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 32 } + } + }, + optional: false, + range: [27, 32], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 32 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }], + range: [14, 17], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 17 } + } + }, + range: [14, 38], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 38 } + } + }, + range: [12, 38], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 38 } + } + }, + range: [4, 38], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 38 } + } + }, + init: null, + range: [4, 38], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 38 } + } + }], + kind: "var", + range: [0, 38], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 38 } + } + }, + }, + "Array Types": { + "var a: number[]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ArrayTypeAnnotation", + elementType: { + type: "NumberTypeAnnotation", + range: [7, 13], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 13 } + } + }, + range: [7, 15], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 15 } + } + }, + range: [5, 15], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 15 } + } + }, + range: [4, 15], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 15 } + } + }, + init: null, + range: [4, 15], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 15 } + } + }], + kind: "var", + range: [0, 15], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 15 } + } + }, + "var a: ?number[]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NullableTypeAnnotation", + typeAnnotation: { + type: "ArrayTypeAnnotation", + elementType: { + type: "NumberTypeAnnotation", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + range: [8, 16], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 16 } + } + }, + range: [7, 16], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 16 } + } + }, + range: [5, 16], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 16 } + } + }, + range: [4, 16], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 16 } + } + }, + init: null, + range: [4, 16], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 16 } + } + }], + kind: "var", + range: [0, 16], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 16 } + } + }, + "var a: (?number)[]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ArrayTypeAnnotation", + elementType: { + type: "NullableTypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [9, 15], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 15 } + } + }, + range: [8, 15], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 15 } + } + }, + range: [7, 18], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 18 } + } + }, + range: [5, 18], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 18 } + } + }, + range: [4, 18], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 18 } + } + }, + init: null, + range: [4, 18], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 18 } + } + }], + kind: "var", + range: [0, 18], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 18 } + } + }, + "var a: () => number[]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "ArrayTypeAnnotation", + elementType: { + type: "NumberTypeAnnotation", + range: [13, 19], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 19 } + } + }, + range: [13, 21], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 21 } + } + }, + rest: null, + typeParameters: null, + range: [7, 21], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 21 } + } + }, + range: [5, 21], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 21 } + } + }, + range: [4, 21], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 21 } + } + }, + init: null, + range: [4, 21], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 21 } + } + }], + kind: "var", + range: [0, 21], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 21 } + } + }, + "var a: (() => number)[]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ArrayTypeAnnotation", + elementType: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, + rest: null, + typeParameters: null, + range: [8, 20], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 20 } + } + }, + range: [7, 23], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 23 } + } + }, + range: [5, 23], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 23 } + } + }, + range: [4, 23], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 23 } + } + }, + init: null, + range: [4, 23], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 23 } + } + }], + kind: "var", + range: [0, 23], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 23 } + } + }, + "var a: typeof A[]": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ArrayTypeAnnotation", + elementType: { + type: "TypeofTypeAnnotation", + argument: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "A", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + typeParameters: null, + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + range: [7, 15], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 15 } + } + }, + range: [7, 17], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 17 } + } + }, + range: [5, 17], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 17 } + } + }, + range: [4, 17], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 17 } + } + }, + init: null, + range: [4, 17], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 17 } + } + }], + kind: "var", + range: [0, 17], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 17 } + } + }, + }, + "Tuples": { + "var a : [] = [];": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "TupleTypeAnnotation", + types: [], + range: [8, 10], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 10 } + } + }, + range: [6, 10], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 10 } + } + }, + range: [4, 10], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 10 } + } + }, + init: { + type: "ArrayExpression", + elements: [], + range: [13, 15], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 15 } + } + }, + range: [4, 15], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 15 } + } + }], + kind: "var", + range: [0, 16], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 16 } + } + }, + "var a : [Foo] = [foo];": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "TupleTypeAnnotation", + types: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Foo", + range: [9, 12], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 12 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [13, 14], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 14 } + } + }, + typeParameters: null, + range: [13, 14], + loc: { + start: { line: 1, column: 13 }, + end: { line: 1, column: 14 } + } + }], + range: [12, 15], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 15 } + } + }, + range: [9, 15], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 15 } + } + }], + range: [8, 16], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 16 } + } + }, + range: [6, 16], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 16 } + } + }, + range: [4, 16], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 16 } + } + }, + init: { + type: "ArrayExpression", + elements: [{ + type: "Identifier", + name: "foo", + range: [20, 23], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 23 } + } + }], + range: [19, 24], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 24 } + } + }, + range: [4, 24], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 24 } + } + }], + kind: "var", + range: [0, 25], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 25 } + } + }, + "var a : [number,] = [123,];": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "TupleTypeAnnotation", + types: [{ + type: "NumberTypeAnnotation", + range: [9, 15], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 15 } + } + }], + range: [8, 17], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 17 } + } + }, + range: [6, 17], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 17 } + } + }, + range: [4, 17], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 17 } + } + }, + init: { + type: "ArrayExpression", + elements: [{ + type: "Literal", + value: 123, + raw: "123", + range: [21, 24], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 24 } + } + }], + range: [20, 26], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 26 } + } + }, + range: [4, 26], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 26 } + } + }], + kind: "var", + range: [0, 27], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 27 } + } + }, + 'var a : [number, string] = [123, "duck"];': { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "TupleTypeAnnotation", + types: [{ + type: "NumberTypeAnnotation", + range: [9, 15], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 15 } + } + }, { + type: "StringTypeAnnotation", + range: [17, 23], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 23 } + } + }], + range: [8, 24], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 24 } + } + }, + range: [6, 24], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 24 } + } + }, + range: [4, 24], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 24 } + } + }, + init: { + type: "ArrayExpression", + elements: [{ + type: "Literal", + value: 123, + raw: "123", + range: [28, 31], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 31 } + } + }, { + type: "Literal", + value: "duck", + raw: '"duck"', + range: [33, 39], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 39 } + } + }], + range: [27, 40], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 40 } + } + }, + range: [4, 40], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 40 } + } + }], + kind: "var", + range: [0, 41], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 41 } + } + }, + }, + "Type Alias": { + "type FBID = number;": { + type: "TypeAlias", + id: { + type: "Identifier", + name: "FBID", + range: [5, 9], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 9 } + } + }, + typeParameters: null, + right: { + type: "NumberTypeAnnotation", + range: [12, 18], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 18 } + } + }, + range: [0, 19], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 19 } + } + }, + "type Foo = Bar": { + type: "TypeAlias", + id: { + type: "Identifier", + name: "Foo", + range: [5, 8], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 8 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [9, 10], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 10 } + } + }], + range: [8, 11], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 11 } + } + }, + right: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "Bar", + range: [14, 17], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 17 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [18, 19], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 19 } + } + }, + typeParameters: null, + range: [18, 19], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 19 } + } + }], + range: [17, 20], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 20 } + } + }, + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, + range: [0, 20], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 20 } + } + }, + }, + "Interfaces": { + "interface A {}": { + type: "InterfaceDeclaration", + id: { + type: "Identifier", + name: "A", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [], + range: [12, 14], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 14 } + } + }, + "extends": [], + range: [0, 14], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 14 } + } + }, + "interface A extends B {}": { + type: "InterfaceDeclaration", + id: { + type: "Identifier", + name: "A", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [], + range: [22, 24], + loc: { + start: { line: 1, column: 22 }, + end: { line: 1, column: 24 } + } + }, + "extends": [{ + type: "InterfaceExtends", + id: { + type: "Identifier", + name: "B", + range: [20, 21], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 21 } + } + }, + typeParameters: null, + range: [20, 21], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 21 } + } + }], + range: [0, 24], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 24 } + } + }, + "interface A extends B, C {}": { + type: "InterfaceDeclaration", + id: { + type: "Identifier", + name: "A", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [12, 13], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 13 } + } + }], + range: [11, 14], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 14 } + } + }, + body: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [], + range: [34, 36], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 36 } + } + }, + "extends": [{ + type: "InterfaceExtends", + id: { + type: "Identifier", + name: "B", + range: [23, 24], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 24 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [25, 26], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 26 } + } + }, + typeParameters: null, + range: [25, 26], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 26 } + } + }], + range: [24, 27], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 27 } + } + }, + range: [23, 27], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 27 } + } + }, { + type: "InterfaceExtends", + id: { + type: "Identifier", + name: "C", + range: [29, 30], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 30 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [31, 32], + loc: { + start: { line: 1, column: 31 }, + end: { line: 1, column: 32 } + } + }, + typeParameters: null, + range: [31, 32], + loc: { + start: { line: 1, column: 31 }, + end: { line: 1, column: 32 } + } + }], + range: [30, 33], + loc: { + start: { line: 1, column: 30 }, + end: { line: 1, column: 33 } + } + }, + range: [29, 33], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 33 } + } + }], + range: [0, 36], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 36 } + } + }, + "interface A { foo: () => number; }": { + type: "InterfaceDeclaration", + id: { + type: "Identifier", + name: "A", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "foo", + range: [14, 17], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 17 } + } + }, + value: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [25, 31], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 31 } + } + }, + rest: null, + typeParameters: null, + range: [19, 31], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 31 } + } + }, + optional: false, + range: [14, 31], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 31 } + } + }], + indexers: [], + callProperties: [], + range: [12, 34], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 34 } + } + }, + "extends": [], + range: [0, 34], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 34 } + } + }, + "interface Dictionary { [index: string]: string; length: number; }": { + type: "InterfaceDeclaration", + id: { + type: "Identifier", + name: "Dictionary", + range: [10, 20], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 20 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "length", + range: [48, 54], + loc: { + start: { line: 1, column: 48 }, + end: { line: 1, column: 54 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [56, 62], + loc: { + start: { line: 1, column: 56 }, + end: { line: 1, column: 62 } + } + }, + optional: false, + range: [48, 62], + loc: { + start: { line: 1, column: 48 }, + end: { line: 1, column: 62 } + } + }], + indexers: [{ + type: "ObjectTypeIndexer", + id: { + type: "Identifier", + name: "index", + range: [24, 29], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 29 } + } + }, + key: { + type: "StringTypeAnnotation", + range: [31, 37], + loc: { + start: { line: 1, column: 31 }, + end: { line: 1, column: 37 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [40, 46], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 46 } + } + }, + range: [23, 46], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 46 } + } + }], + callProperties: [], + range: [21, 65], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 65 } + } + }, + "extends": [], + range: [0, 65], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 65 } + } + }, + "class Foo implements Bar {}": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [], + range: [25, 27], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 27 } + } + }, + "implements": [{ + type: "ClassImplements", + id: { + type: "Identifier", + name: "Bar", + range: [21, 24], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 24 } + } + }, + typeParameters: null, + range: [21, 24], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 24 } + } + }], + range: [0, 27], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 27 } + } + }, + "class Foo extends Bar implements Bat, Man {}": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: { + type: "Identifier", + name: "Bar", + range: [18, 21], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 21 } + } + }, + body: { + type: "ClassBody", + body: [], + range: [50, 52], + loc: { + start: { line: 1, column: 50 }, + end: { line: 1, column: 52 } + } + }, + "implements": [{ + type: "ClassImplements", + id: { + type: "Identifier", + name: "Bat", + range: [33, 36], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 36 } + } + }, + typeParameters: null, + range: [33, 36], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 36 } + } + }, { + type: "ClassImplements", + id: { + type: "Identifier", + name: "Man", + range: [38, 41], + loc: { + start: { line: 1, column: 38 }, + end: { line: 1, column: 41 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "NumberTypeAnnotation", + range: [42, 48], + loc: { + start: { line: 1, column: 42 }, + end: { line: 1, column: 48 } + } + }], + range: [41, 49], + loc: { + start: { line: 1, column: 41 }, + end: { line: 1, column: 49 } + } + }, + range: [38, 49], + loc: { + start: { line: 1, column: 38 }, + end: { line: 1, column: 49 } + } + }], + range: [0, 52], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 52 } + } + }, + "class Foo extends class Bar implements Bat {} {}": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: { + type: "ClassExpression", + id: { + type: "Identifier", + name: "Bar", + range: [24, 27], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 27 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [], + range: [43, 45], + loc: { + start: { line: 1, column: 43 }, + end: { line: 1, column: 45 } + } + }, + "implements": [{ + type: "ClassImplements", + id: { + type: "Identifier", + name: "Bat", + range: [39, 42], + loc: { + start: { line: 1, column: 39 }, + end: { line: 1, column: 42 } + } + }, + typeParameters: null, + range: [39, 42], + loc: { + start: { line: 1, column: 39 }, + end: { line: 1, column: 42 } + } + }], + range: [18, 45], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 45 } + } + }, + body: { + type: "ClassBody", + body: [], + range: [46, 48], + loc: { + start: { line: 1, column: 46 }, + end: { line: 1, column: 48 } + } + }, + range: [0, 48], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 48 } + } + }, + "class Foo extends class Bar implements Bat {} implements Man {}": { + type: "ClassDeclaration", + id: { + type: "Identifier", + name: "Foo", + range: [6, 9], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 9 } + } + }, + superClass: { + type: "ClassExpression", + id: { + type: "Identifier", + name: "Bar", + range: [24, 27], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 27 } + } + }, + superClass: null, + body: { + type: "ClassBody", + body: [], + range: [43, 45], + loc: { + start: { line: 1, column: 43 }, + end: { line: 1, column: 45 } + } + }, + "implements": [{ + type: "ClassImplements", + id: { + type: "Identifier", + name: "Bat", + range: [39, 42], + loc: { + start: { line: 1, column: 39 }, + end: { line: 1, column: 42 } + } + }, + typeParameters: null, + range: [39, 42], + loc: { + start: { line: 1, column: 39 }, + end: { line: 1, column: 42 } + } + }], + range: [18, 45], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 45 } + } + }, + body: { + type: "ClassBody", + body: [], + range: [61, 63], + loc: { + start: { line: 1, column: 61 }, + end: { line: 1, column: 63 } + } + }, + "implements": [{ + type: "ClassImplements", + id: { + type: "Identifier", + name: "Man", + range: [57, 60], + loc: { + start: { line: 1, column: 57 }, + end: { line: 1, column: 60 } + } + }, + typeParameters: null, + range: [57, 60], + loc: { + start: { line: 1, column: 57 }, + end: { line: 1, column: 60 } + } + }], + range: [0, 63], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 63 } + } + }, + }, + "Type Grouping": { + "var a: (number)": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + range: [5, 15], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 15 } + } + }, + range: [4, 15], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 15 } + } + }, + init: null, + range: [4, 15], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 15 } + } + }], + kind: "var", + range: [0, 15], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 15 } + } + }, + "var a: (() => number) | () => string": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "UnionTypeAnnotation", + types: [{ + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, + rest: null, + typeParameters: null, + range: [8, 20], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 20 } + } + }, { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "StringTypeAnnotation", + range: [30, 36], + loc: { + start: { line: 1, column: 30 }, + end: { line: 1, column: 36 } + } + }, + rest: null, + typeParameters: null, + range: [24, 36], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 36 } + } + }], + range: [7, 36], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 36 } + } + }, + range: [5, 36], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 36 } + } + }, + range: [4, 36], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 36 } + } + }, + init: null, + range: [4, 36], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 36 } + } + }], + kind: "var", + range: [0, 36], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 36 } + } + }, + "var a: number & (string | bool)": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "IntersectionTypeAnnotation", + types: [{ + type: "NumberTypeAnnotation", + range: [7, 13], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 13 } + } + }, { + type: "UnionTypeAnnotation", + types: [{ + type: "StringTypeAnnotation", + range: [17, 23], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 23 } + } + }, { + type: "BooleanTypeAnnotation", + range: [26, 30], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 30 } + } + }], + range: [17, 30], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 30 } + } + }], + range: [7, 31], + loc: { + start: { line: 1, column: 7 }, + end: { line: 1, column: 31 } + } + }, + range: [5, 31], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 31 } + } + }, + range: [4, 31], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 31 } + } + }, + init: null, + range: [4, 31], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 31 } + } + }], + kind: "var", + range: [0, 31], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 31 } + } + }, + "var a: (typeof A)": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "TypeofTypeAnnotation", + argument: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "A", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }, + typeParameters: null, + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }, + range: [8, 16], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 16 } + } + }, + range: [5, 17], + loc: { + start: { line: 1, column: 5 }, + end: { line: 1, column: 17 } + } + }, + range: [4, 17], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 17 } + } + }, + init: null, + range: [4, 17], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 17 } + } + }], + kind: "var", + range: [0, 17], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 17 } + } + }, + }, + "Call Properties": { + "var a : { (): number }": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [{ + type: "ObjectTypeCallProperty", + value: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, + rest: null, + typeParameters: null, + range: [10, 20], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 20 } + } + }, + range: [10, 20], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 20 } + } + }], + range: [8, 22], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 22 } + } + }, + range: [6, 22], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 22 } + } + }, + range: [4, 22], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 22 } + } + }, + init: null, + range: [4, 22], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 22 } + } + }], + kind: "var", + range: [0, 22], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 22 } + } + }, + "var a : { (): number; }": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [{ + type: "ObjectTypeCallProperty", + value: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, + rest: null, + typeParameters: null, + range: [10, 20], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 20 } + } + }, + range: [10, 20], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 20 } + } + }], + range: [8, 23], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 23 } + } + }, + range: [6, 23], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 23 } + } + }, + range: [4, 23], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 23 } + } + }, + init: null, + range: [4, 23], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 23 } + } + }], + kind: "var", + range: [0, 23], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 23 } + } + }, + "var a : { (): number; y: string; (x: string): string }": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "y", + range: [22, 23], + loc: { + start: { line: 1, column: 22 }, + end: { line: 1, column: 23 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [25, 31], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 31 } + } + }, + optional: false, + range: [22, 31], + loc: { + start: { line: 1, column: 22 }, + end: { line: 1, column: 31 } + } + }], + indexers: [], + callProperties: [{ + type: "ObjectTypeCallProperty", + value: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [14, 20], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 20 } + } + }, + rest: null, + typeParameters: null, + range: [10, 20], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 20 } + } + }, + range: [10, 20], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 20 } + } + }, { + type: "ObjectTypeCallProperty", + value: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "x", + range: [34, 35], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 35 } + } + }, + typeAnnotation: { + type: "StringTypeAnnotation", + range: [37, 43], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 43 } + } + }, + optional: false, + range: [34, 43], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 43 } + } + }], + returnType: { + type: "StringTypeAnnotation", + range: [46, 52], + loc: { + start: { line: 1, column: 46 }, + end: { line: 1, column: 52 } + } + }, + rest: null, + typeParameters: null, + range: [33, 52], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 52 } + } + }, + range: [33, 52], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 52 } + } + }], + range: [8, 54], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 54 } + } + }, + range: [6, 54], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 54 } + } + }, + range: [4, 54], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 54 } + } + }, + init: null, + range: [4, 54], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 54 } + } + }], + kind: "var", + range: [0, 54], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 54 } + } + }, + "var a : { (x: T): number; }": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [{ + type: "ObjectTypeCallProperty", + value: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "x", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [17, 18], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 18 } + } + }, + typeParameters: null, + range: [17, 18], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 18 } + } + }, + optional: false, + range: [14, 18], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 18 } + } + }], + returnType: { + type: "NumberTypeAnnotation", + range: [21, 27], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 27 } + } + }, + rest: null, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [11, 12], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 12 } + } + }], + range: [10, 13], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 13 } + } + }, + range: [10, 27], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 27 } + } + }, + range: [10, 27], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 27 } + } + }], + range: [8, 30], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 30 } + } + }, + range: [6, 30], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 30 } + } + }, + range: [4, 30], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 30 } + } + }, + init: null, + range: [4, 30], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 30 } + } + }], + kind: "var", + range: [0, 30], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 30 } + } + }, + "interface A { (): number; }": { + type: "InterfaceDeclaration", + id: { + type: "Identifier", + name: "A", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [{ + type: "ObjectTypeCallProperty", + value: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [18, 24], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 24 } + } + }, + rest: null, + typeParameters: null, + range: [14, 24], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 24 } + } + }, + "static": false, + range: [14, 24], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 24 } + } + }], + range: [12, 27], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 27 } + } + }, + "extends": [], + range: [0, 27], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 27 } + } + }, + }, + "String Literal Types": { + 'function createElement(tagName: "div"): HTMLDivElement {}': { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "createElement", + range: [9, 22], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 22 } + } + }, + params: [{ + type: "Identifier", + name: "tagName", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "StringLiteralTypeAnnotation", + value: "div", + raw: '"div"', + range: [32, 37], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 37 } + } + }, + range: [30, 37], + loc: { + start: { line: 1, column: 30 }, + end: { line: 1, column: 37 } + } + }, + range: [23, 37], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 37 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [55, 57], + loc: { + start: { line: 1, column: 55 }, + end: { line: 1, column: 57 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "HTMLDivElement", + range: [40, 54], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 54 } + } + }, + typeParameters: null, + range: [40, 54], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 54 } + } + }, + range: [38, 54], + loc: { + start: { line: 1, column: 38 }, + end: { line: 1, column: 54 } + } + }, + range: [0, 57], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 57 } + } + }, + "function createElement(tagName: \"div\"): HTMLDivElement {}": { + type: "FunctionDeclaration", + id: { + type: "Identifier", + name: "createElement", + range: [9, 22], + loc: { + start: { line: 1, column: 9 }, + end: { line: 1, column: 22 } + } + }, + params: [{ + type: "Identifier", + name: "tagName", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "StringLiteralTypeAnnotation", + value: "div", + raw: "\"div\"", + range: [32, 37], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 37 } + } + }, + range: [30, 37], + loc: { + start: { line: 1, column: 30 }, + end: { line: 1, column: 37 } + } + }, + range: [23, 37], + loc: { + start: { line: 1, column: 23 }, + end: { line: 1, column: 37 } + } + }], + defaults: [], + body: { + type: "BlockStatement", + body: [], + range: [55, 57], + loc: { + start: { line: 1, column: 55 }, + end: { line: 1, column: 57 } + } + }, + rest: null, + generator: false, + expression: false, + returnType: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "HTMLDivElement", + range: [40, 54], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 54 } + } + }, + typeParameters: null, + range: [40, 54], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 54 } + } + }, + range: [38, 54], + loc: { + start: { line: 1, column: 38 }, + end: { line: 1, column: 54 } + } + }, + range: [0, 57], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 57 } + } + }, + }, + "Qualified Generic Type": { + "var a : A.B": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "QualifiedTypeIdentifier", + qualification: { + type: "Identifier", + name: "A", + range: [8, 9], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 9 } + } + }, + id: { + type: "Identifier", + name: "B", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + range: [8, 11], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 11 } + } + }, + typeParameters: null, + range: [8, 11], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 11 } + } + }, + range: [6, 11], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 11 } + } + }, + range: [4, 11], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 11 } + } + }, + init: null, + range: [4, 11], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 11 } + } + }], + kind: "var", + range: [0, 11], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 11 } + } + }, + "var a : A.B.C": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "QualifiedTypeIdentifier", + qualification: { + type: "QualifiedTypeIdentifier", + qualification: { + type: "Identifier", + name: "A", + range: [8, 9], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 9 } + } + }, + id: { + type: "Identifier", + name: "B", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + range: [8, 11], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 11 } + } + }, + id: { + type: "Identifier", + name: "C", + range: [12, 13], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 13 } + } + }, + range: [8, 13], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 13 } + } + }, + typeParameters: null, + range: [8, 13], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 13 } + } + }, + range: [6, 13], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 13 } + } + }, + range: [4, 13], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 13 } + } + }, + init: null, + range: [4, 13], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 13 } + } + }], + kind: "var", + range: [0, 13], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 13 } + } + }, + "var a : A.B": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "GenericTypeAnnotation", + id: { + type: "QualifiedTypeIdentifier", + qualification: { + type: "Identifier", + name: "A", + range: [8, 9], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 9 } + } + }, + id: { + type: "Identifier", + name: "B", + range: [10, 11], + loc: { + start: { line: 1, column: 10 }, + end: { line: 1, column: 11 } + } + }, + range: [8, 11], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 11 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [12, 13], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 13 } + } + }, + typeParameters: null, + range: [12, 13], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 13 } + } + }], + range: [11, 14], + loc: { + start: { line: 1, column: 11 }, + end: { line: 1, column: 14 } + } + }, + range: [8, 14], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 14 } + } + }, + range: [6, 14], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 14 } + } + }, + range: [4, 14], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 14 } + } + }, + init: null, + range: [4, 14], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 14 } + } + }], + kind: "var", + range: [0, 14], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 14 } + } + }, + "var a : typeof A.B": { + type: "VariableDeclaration", + declarations: [{ + type: "VariableDeclarator", + id: { + type: "Identifier", + name: "a", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "TypeofTypeAnnotation", + argument: { + type: "GenericTypeAnnotation", + id: { + type: "QualifiedTypeIdentifier", + qualification: { + type: "Identifier", + name: "A", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }, + id: { + type: "Identifier", + name: "B", + range: [17, 18], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 18 } + } + }, + range: [15, 18], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 18 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [19, 20], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 20 } + } + }, + typeParameters: null, + range: [19, 20], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 20 } + } + }], + range: [18, 21], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 21 } + } + }, + range: [15, 21], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 21 } + } + }, + range: [8, 21], + loc: { + start: { line: 1, column: 8 }, + end: { line: 1, column: 21 } + } + }, + range: [6, 21], + loc: { + start: { line: 1, column: 6 }, + end: { line: 1, column: 21 } + } + }, + range: [4, 21], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 21 } + } + }, + init: null, + range: [4, 21], + loc: { + start: { line: 1, column: 4 }, + end: { line: 1, column: 21 } + } + }], + kind: "var", + range: [0, 21], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 21 } + } + }, + }, + "Declare Statements": { + "declare var foo": { + type: "DeclareVariable", + id: { + type: "Identifier", + name: "foo", + range: [12, 15], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 15 } + } + }, + range: [0, 15], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 15 } + } + }, + "declare var foo;": { + type: "DeclareVariable", + id: { + type: "Identifier", + name: "foo", + range: [12, 15], + loc: { + start: { line: 1, column: 12 }, + end: { line: 1, column: 15 } + } + }, + range: [0, 16], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 16 } + } + }, + "declare function foo(): void": { + type: "DeclareFunction", + id: { + type: "Identifier", + name: "foo", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "VoidTypeAnnotation", + range: [24, 28], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 28 } + } + }, + rest: null, + typeParameters: null, + range: [20, 28], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 28 } + } + }, + range: [20, 28], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 28 } + } + }, + range: [17, 28], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 28 } + } + }, + range: [0, 28], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 28 } + } + }, + "declare function foo(): void;": { + type: "DeclareFunction", + id: { + type: "Identifier", + name: "foo", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "VoidTypeAnnotation", + range: [24, 28], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 28 } + } + }, + rest: null, + typeParameters: null, + range: [20, 28], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 28 } + } + }, + range: [20, 28], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 28 } + } + }, + range: [17, 28], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 28 } + } + }, + range: [0, 29], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 29 } + } + }, + "declare function foo(): void;": { + type: "DeclareFunction", + id: { + type: "Identifier", + name: "foo", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "VoidTypeAnnotation", + range: [27, 31], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 31 } + } + }, + rest: null, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [21, 22], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 22 } + } + }], + range: [20, 23], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 23 } + } + }, + range: [20, 31], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 31 } + } + }, + range: [20, 31], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 31 } + } + }, + range: [17, 31], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 31 } + } + }, + range: [0, 32], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 32 } + } + }, + "declare function foo(x: number, y: string): void;": { + type: "DeclareFunction", + id: { + type: "Identifier", + name: "foo", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [{ + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "x", + range: [21, 22], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 22 } + } + }, + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [24, 30], + loc: { + start: { line: 1, column: 24 }, + end: { line: 1, column: 30 } + } + }, + optional: false, + range: [21, 30], + loc: { + start: { line: 1, column: 21 }, + end: { line: 1, column: 30 } + } + }, { + type: "FunctionTypeParam", + name: { + type: "Identifier", + name: "y", + range: [32, 33], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 33 } + } + }, + typeAnnotation: { + type: "StringTypeAnnotation", + range: [35, 41], + loc: { + start: { line: 1, column: 35 }, + end: { line: 1, column: 41 } + } + }, + optional: false, + range: [32, 41], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 41 } + } + }], + returnType: { + type: "VoidTypeAnnotation", + range: [44, 48], + loc: { + start: { line: 1, column: 44 }, + end: { line: 1, column: 48 } + } + }, + rest: null, + typeParameters: null, + range: [20, 48], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 48 } + } + }, + range: [20, 48], + loc: { + start: { line: 1, column: 20 }, + end: { line: 1, column: 48 } + } + }, + range: [17, 48], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 48 } + } + }, + range: [0, 49], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 49 } + } + }, + "declare class A {}": { + type: "DeclareClass", + id: { + type: "Identifier", + name: "A", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [], + range: [16, 18], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 18 } + } + }, + "extends": [], + range: [0, 18], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 18 } + } + }, + "declare class A extends B { x: number }": { + type: "DeclareClass", + id: { + type: "Identifier", + name: "A", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + typeParameters: { + type: "TypeParameterDeclaration", + params: [{ + type: "Identifier", + name: "T", + range: [16, 17], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 17 } + } + }], + range: [15, 18], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 18 } + } + }, + body: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "x", + range: [34, 35], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 35 } + } + }, + value: { + type: "NumberTypeAnnotation", + range: [37, 43], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 43 } + } + }, + optional: false, + range: [34, 43], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 43 } + } + }], + indexers: [], + callProperties: [], + range: [32, 45], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 45 } + } + }, + "extends": [{ + type: "InterfaceExtends", + id: { + type: "Identifier", + name: "B", + range: [27, 28], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 28 } + } + }, + typeParameters: { + type: "TypeParameterInstantiation", + params: [{ + type: "GenericTypeAnnotation", + id: { + type: "Identifier", + name: "T", + range: [29, 30], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 30 } + } + }, + typeParameters: null, + range: [29, 30], + loc: { + start: { line: 1, column: 29 }, + end: { line: 1, column: 30 } + } + }], + range: [28, 31], + loc: { + start: { line: 1, column: 28 }, + end: { line: 1, column: 31 } + } + }, + range: [27, 31], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 31 } + } + }], + range: [0, 45], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 45 } + } + }, + "declare class A { static foo(): number; static x : string }": { + type: "DeclareClass", + id: { + type: "Identifier", + name: "A", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "foo", + range: [25, 28], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 28 } + } + }, + value: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [32, 38], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 38 } + } + }, + rest: null, + typeParameters: null, + range: [18, 38], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 38 } + } + }, + optional: false, + "static": true, + range: [18, 38], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 38 } + } + }, { + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "x", + range: [47, 48], + loc: { + start: { line: 1, column: 47 }, + end: { line: 1, column: 48 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [51, 57], + loc: { + start: { line: 1, column: 51 }, + end: { line: 1, column: 57 } + } + }, + optional: false, + "static": true, + range: [40, 57], + loc: { + start: { line: 1, column: 40 }, + end: { line: 1, column: 57 } + } + }], + indexers: [], + callProperties: [], + range: [16, 59], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 59 } + } + }, + "extends": [], + range: [0, 59], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 59 } + } + }, + "declare class A { static [ indexer: number]: string }": { + type: "DeclareClass", + id: { + type: "Identifier", + name: "A", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [{ + type: "ObjectTypeIndexer", + id: { + type: "Identifier", + name: "indexer", + range: [27, 34], + loc: { + start: { line: 1, column: 27 }, + end: { line: 1, column: 34 } + } + }, + key: { + type: "NumberTypeAnnotation", + range: [36, 42], + loc: { + start: { line: 1, column: 36 }, + end: { line: 1, column: 42 } + } + }, + value: { + type: "StringTypeAnnotation", + range: [45, 51], + loc: { + start: { line: 1, column: 45 }, + end: { line: 1, column: 51 } + } + }, + "static": true, + range: [18, 51], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 51 } + } + }], + callProperties: [], + range: [16, 53], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 53 } + } + }, + "extends": [], + range: [0, 53], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 53 } + } + }, + "declare class A { static () : number }": { + type: "DeclareClass", + id: { + type: "Identifier", + name: "A", + range: [14, 15], + loc: { + start: { line: 1, column: 14 }, + end: { line: 1, column: 15 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [], + indexers: [], + callProperties: [{ + type: "ObjectTypeCallProperty", + value: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [30, 36], + loc: { + start: { line: 1, column: 30 }, + end: { line: 1, column: 36 } + } + }, + rest: null, + typeParameters: null, + range: [25, 36], + loc: { + start: { line: 1, column: 25 }, + end: { line: 1, column: 36 } + } + }, + "static": true, + range: [18, 36], + loc: { + start: { line: 1, column: 18 }, + end: { line: 1, column: 36 } + } + }], + range: [16, 38], + loc: { + start: { line: 1, column: 16 }, + end: { line: 1, column: 38 } + } + }, + "extends": [], + range: [0, 38], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 38 } + } + }, + }, + "Declare Module": { + "declare module A {}": { + type: "DeclareModule", + id: { + type: "Identifier", + name: "A", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }, + body: { + type: "BlockStatement", + body: [], + range: [17, 19], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 19 } + } + }, + range: [0, 19], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 19 } + } + }, + 'declare module "./a/b.js" {}': { + type: "DeclareModule", + id: { + type: "Literal", + value: "./a/b.js", + raw: '"./a/b.js"', + range: [15, 25], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 25 } + } + }, + body: { + type: "BlockStatement", + body: [], + range: [26, 28], + loc: { + start: { line: 1, column: 26 }, + end: { line: 1, column: 28 } + } + }, + range: [0, 28], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 28 } + } + }, + "declare module A { declare var x: number; }": { + type: "DeclareModule", + id: { + type: "Identifier", + name: "A", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }, + body: { + type: "BlockStatement", + body: [{ + type: "DeclareVariable", + id: { + type: "Identifier", + name: "x", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "NumberTypeAnnotation", + range: [34, 40], + loc: { + start: { line: 1, column: 34 }, + end: { line: 1, column: 40 } + } + }, + range: [32, 40], + loc: { + start: { line: 1, column: 32 }, + end: { line: 1, column: 40 } + } + }, + range: [31, 40], + loc: { + start: { line: 1, column: 31 }, + end: { line: 1, column: 40 } + } + }, + range: [19, 41], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 41 } + } + }], + range: [17, 43], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 43 } + } + }, + range: [0, 43], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 43 } + } + }, + "declare module A { declare function foo(): number; }": { + type: "DeclareModule", + id: { + type: "Identifier", + name: "A", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }, + body: { + type: "BlockStatement", + body: [{ + type: "DeclareFunction", + id: { + type: "Identifier", + name: "foo", + typeAnnotation: { + type: "TypeAnnotation", + typeAnnotation: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [43, 49], + loc: { + start: { line: 1, column: 43 }, + end: { line: 1, column: 49 } + } + }, + rest: null, + typeParameters: null, + range: [39, 49], + loc: { + start: { line: 1, column: 39 }, + end: { line: 1, column: 49 } + } + }, + range: [39, 49], + loc: { + start: { line: 1, column: 39 }, + end: { line: 1, column: 49 } + } + }, + range: [36, 49], + loc: { + start: { line: 1, column: 36 }, + end: { line: 1, column: 49 } + } + }, + range: [19, 50], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 50 } + } + }], + range: [17, 52], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 52 } + } + }, + range: [0, 52], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 52 } + } + }, + "declare module A { declare class B { foo(): number; } }": { + type: "DeclareModule", + id: { + type: "Identifier", + name: "A", + range: [15, 16], + loc: { + start: { line: 1, column: 15 }, + end: { line: 1, column: 16 } + } + }, + body: { + type: "BlockStatement", + body: [{ + type: "DeclareClass", + id: { + type: "Identifier", + name: "B", + range: [33, 34], + loc: { + start: { line: 1, column: 33 }, + end: { line: 1, column: 34 } + } + }, + typeParameters: null, + body: { + type: "ObjectTypeAnnotation", + properties: [{ + type: "ObjectTypeProperty", + key: { + type: "Identifier", + name: "foo", + range: [37, 40], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 40 } + } + }, + value: { + type: "FunctionTypeAnnotation", + params: [], + returnType: { + type: "NumberTypeAnnotation", + range: [44, 50], + loc: { + start: { line: 1, column: 44 }, + end: { line: 1, column: 50 } + } + }, + rest: null, + typeParameters: null, + range: [37, 50], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 50 } + } + }, + optional: false, + range: [37, 50], + loc: { + start: { line: 1, column: 37 }, + end: { line: 1, column: 50 } + } + }], + indexers: [], + callProperties: [], + range: [35, 53], + loc: { + start: { line: 1, column: 35 }, + end: { line: 1, column: 53 } + } + }, + "extends": [], + range: [19, 53], + loc: { + start: { line: 1, column: 19 }, + end: { line: 1, column: 53 } + } + }], + range: [17, 55], + loc: { + start: { line: 1, column: 17 }, + end: { line: 1, column: 55 } + } + }, + range: [0, 55], + loc: { + start: { line: 1, column: 0 }, + end: { line: 1, column: 55 } + } + } + } +}; + +if (typeof exports !== "undefined") { + var test = require("./driver.js").test; +} + +for (var ns in fbTestFixture) { + ns = fbTestFixture[ns]; + for (var code in ns) { + test(code, { + type: "Program", + body: [ns[code]] + }, { + ecmaVersion: 6, + locations: true, + ranges: true + }); + } +}