// NOTE: This file is autogenerated. Do not modify.
// See scripts/generate-interfaces.js for script used.

declare class BabelNodeComment {
  value: string;
  start: number;
  end: number;
  loc: BabelNodeSourceLocation;
}

declare class BabelNodeBlockComment extends BabelNodeComment {
  type: "BlockComment";
}

declare class BabelNodeLineComment extends BabelNodeComment {
  type: "LineComment";
}

declare class BabelNodeSourceLocation {
  start: {
    line: number;
    column: number;
  };

  end: {
    line: number;
    column: number;
  };
}

declare class BabelNode {
  leadingComments: ?Array<BabelNodeComment>;
  innerComments: ?Array<BabelNodeComment>;
  trailingComments: ?Array<BabelNodeComment>;
  start: ?number;
  end: ?number;
  loc: ?BabelNodeSourceLocation;
}

declare class BabelNodeArrayExpression extends BabelNode {
  type: "ArrayExpression";
  elements?: any;
}

declare class BabelNodeAssignmentExpression extends BabelNode {
  type: "AssignmentExpression";
  operator: string;
  left: BabelNodeLVal;
  right: BabelNodeExpression;
}

declare class BabelNodeBinaryExpression extends BabelNode {
  type: "BinaryExpression";
  operator: "+" | "-" | "/" | "%" | "*" | "**" | "&" | "|" | ">>" | ">>>" | "<<" | "^" | "==" | "===" | "!=" | "!==" | "in" | "instanceof" | ">" | "<" | ">=" | "<=";
  left: BabelNodeExpression;
  right: BabelNodeExpression;
}

declare class BabelNodeDirective extends BabelNode {
  type: "Directive";
  value: BabelNodeDirectiveLiteral;
}

declare class BabelNodeDirectiveLiteral extends BabelNode {
  type: "DirectiveLiteral";
  value: string;
}

declare class BabelNodeBlockStatement extends BabelNode {
  type: "BlockStatement";
  body: any;
  directives?: any;
}

declare class BabelNodeBreakStatement extends BabelNode {
  type: "BreakStatement";
  label?: ?BabelNodeIdentifier;
}

declare class BabelNodeCallExpression extends BabelNode {
  type: "CallExpression";
  callee: BabelNodeExpression;
  arguments: any;
  optional?: true | false;
  typeParameters?: ?BabelNodeTypeParameterInstantiation;
}

declare class BabelNodeCatchClause extends BabelNode {
  type: "CatchClause";
  param?: ?BabelNodeIdentifier;
  body: BabelNodeBlockStatement;
}

declare class BabelNodeConditionalExpression extends BabelNode {
  type: "ConditionalExpression";
  test: BabelNodeExpression;
  consequent: BabelNodeExpression;
  alternate: BabelNodeExpression;
}

declare class BabelNodeContinueStatement extends BabelNode {
  type: "ContinueStatement";
  label?: ?BabelNodeIdentifier;
}

declare class BabelNodeDebuggerStatement extends BabelNode {
  type: "DebuggerStatement";
}

declare class BabelNodeDoWhileStatement extends BabelNode {
  type: "DoWhileStatement";
  test: BabelNodeExpression;
  body: BabelNodeStatement;
}

declare class BabelNodeEmptyStatement extends BabelNode {
  type: "EmptyStatement";
}

declare class BabelNodeExpressionStatement extends BabelNode {
  type: "ExpressionStatement";
  expression: BabelNodeExpression;
}

declare class BabelNodeFile extends BabelNode {
  type: "File";
  program: BabelNodeProgram;
  comments: any;
  tokens: any;
}

declare class BabelNodeForInStatement extends BabelNode {
  type: "ForInStatement";
  left: BabelNodeVariableDeclaration | BabelNodeLVal;
  right: BabelNodeExpression;
  body: BabelNodeStatement;
}

declare class BabelNodeForStatement extends BabelNode {
  type: "ForStatement";
  init?: ?BabelNodeVariableDeclaration | BabelNodeExpression;
  test?: ?BabelNodeExpression;
  update?: ?BabelNodeExpression;
  body: BabelNodeStatement;
}

declare class BabelNodeFunctionDeclaration extends BabelNode {
  type: "FunctionDeclaration";
  id?: ?BabelNodeIdentifier;
  params: any;
  body: BabelNodeBlockStatement;
  generator?: boolean;
  async?: boolean;
  declare?: boolean;
  returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
  typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop;
}

declare class BabelNodeFunctionExpression extends BabelNode {
  type: "FunctionExpression";
  id?: ?BabelNodeIdentifier;
  params: any;
  body: BabelNodeBlockStatement;
  generator?: boolean;
  async?: boolean;
  returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
  typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop;
}

declare class BabelNodeIdentifier extends BabelNode {
  type: "Identifier";
  name: any;
  decorators?: any;
  optional?: boolean;
  typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
}

declare class BabelNodeIfStatement extends BabelNode {
  type: "IfStatement";
  test: BabelNodeExpression;
  consequent: BabelNodeStatement;
  alternate?: ?BabelNodeStatement;
}

declare class BabelNodeLabeledStatement extends BabelNode {
  type: "LabeledStatement";
  label: BabelNodeIdentifier;
  body: BabelNodeStatement;
}

declare class BabelNodeStringLiteral extends BabelNode {
  type: "StringLiteral";
  value: string;
}

declare class BabelNodeNumericLiteral extends BabelNode {
  type: "NumericLiteral";
  value: number;
}

declare class BabelNodeNullLiteral extends BabelNode {
  type: "NullLiteral";
}

declare class BabelNodeBooleanLiteral extends BabelNode {
  type: "BooleanLiteral";
  value: boolean;
}

declare class BabelNodeRegExpLiteral extends BabelNode {
  type: "RegExpLiteral";
  pattern: string;
  flags?: string;
}

declare class BabelNodeLogicalExpression extends BabelNode {
  type: "LogicalExpression";
  operator: "||" | "&&";
  left: BabelNodeExpression;
  right: BabelNodeExpression;
}

declare class BabelNodeMemberExpression extends BabelNode {
  type: "MemberExpression";
  object: BabelNodeExpression;
  property: any;
  computed?: boolean;
  optional?: true | false;
}

declare class BabelNodeNewExpression extends BabelNode {
  type: "NewExpression";
  callee: BabelNodeExpression;
  arguments: any;
  optional?: true | false;
  typeParameters?: ?BabelNodeTypeParameterInstantiation;
}

declare class BabelNodeProgram extends BabelNode {
  type: "Program";
  body: any;
  directives?: any;
  sourceFile?: string;
}

declare class BabelNodeObjectExpression extends BabelNode {
  type: "ObjectExpression";
  properties: any;
}

declare class BabelNodeObjectMethod extends BabelNode {
  type: "ObjectMethod";
  kind?: any;
  key: any;
  params: any;
  body: BabelNodeBlockStatement;
  computed?: boolean;
  async?: boolean;
  decorators?: any;
  generator?: boolean;
  returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
  typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop;
}

declare class BabelNodeObjectProperty extends BabelNode {
  type: "ObjectProperty";
  key: any;
  value: BabelNodeExpression | BabelNodePatternLike;
  computed?: boolean;
  shorthand?: boolean;
  decorators?: any;
}

declare class BabelNodeRestElement extends BabelNode {
  type: "RestElement";
  argument: BabelNodeLVal;
  decorators?: any;
  typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
}

declare class BabelNodeReturnStatement extends BabelNode {
  type: "ReturnStatement";
  argument?: ?BabelNodeExpression;
}

declare class BabelNodeSequenceExpression extends BabelNode {
  type: "SequenceExpression";
  expressions: any;
}

declare class BabelNodeSwitchCase extends BabelNode {
  type: "SwitchCase";
  test?: ?BabelNodeExpression;
  consequent: any;
}

declare class BabelNodeSwitchStatement extends BabelNode {
  type: "SwitchStatement";
  discriminant: BabelNodeExpression;
  cases: any;
}

declare class BabelNodeThisExpression extends BabelNode {
  type: "ThisExpression";
}

declare class BabelNodeThrowStatement extends BabelNode {
  type: "ThrowStatement";
  argument: BabelNodeExpression;
}

declare class BabelNodeTryStatement extends BabelNode {
  type: "TryStatement";
  block: any;
  handler?: ?BabelNodeBlockStatement;
  finalizer?: ?BabelNodeBlockStatement;
  body?: ?BabelNodeBlockStatement;
}

declare class BabelNodeUnaryExpression extends BabelNode {
  type: "UnaryExpression";
  operator: "void" | "delete" | "!" | "+" | "-" | "~" | "typeof";
  argument: BabelNodeExpression;
  prefix?: boolean;
}

declare class BabelNodeUpdateExpression extends BabelNode {
  type: "UpdateExpression";
  operator: "++" | "--";
  argument: BabelNodeExpression;
  prefix?: boolean;
}

declare class BabelNodeVariableDeclaration extends BabelNode {
  type: "VariableDeclaration";
  kind: any;
  declarations: any;
  declare?: boolean;
}

declare class BabelNodeVariableDeclarator extends BabelNode {
  type: "VariableDeclarator";
  id: BabelNodeLVal;
  init?: ?BabelNodeExpression;
}

declare class BabelNodeWhileStatement extends BabelNode {
  type: "WhileStatement";
  test: BabelNodeExpression;
  body: BabelNodeBlockStatement | BabelNodeStatement;
}

declare class BabelNodeWithStatement extends BabelNode {
  type: "WithStatement";
  object: any;
  body: BabelNodeBlockStatement | BabelNodeStatement;
}

declare class BabelNodeAssignmentPattern extends BabelNode {
  type: "AssignmentPattern";
  left: BabelNodeIdentifier | BabelNodeObjectPattern | BabelNodeArrayPattern;
  right: BabelNodeExpression;
  decorators?: any;
  typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
}

declare class BabelNodeArrayPattern extends BabelNode {
  type: "ArrayPattern";
  elements: any;
  decorators?: any;
  typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
}

declare class BabelNodeArrowFunctionExpression extends BabelNode {
  type: "ArrowFunctionExpression";
  params: any;
  body: BabelNodeBlockStatement | BabelNodeExpression;
  async?: boolean;
  expression?: boolean;
  generator?: boolean;
  returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
  typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop;
}

declare class BabelNodeClassBody extends BabelNode {
  type: "ClassBody";
  body: any;
}

declare class BabelNodeClassDeclaration extends BabelNode {
  type: "ClassDeclaration";
  id?: ?BabelNodeIdentifier;
  superClass?: ?BabelNodeExpression;
  body: BabelNodeClassBody;
  decorators?: any;
  abstract?: boolean;
  declare?: boolean;
  mixins?: any;
  superTypeParameters?: ?BabelNodeTypeParameterInstantiation;
  typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop;
}

declare class BabelNodeClassExpression extends BabelNode {
  type: "ClassExpression";
  id?: ?BabelNodeIdentifier;
  superClass?: ?BabelNodeExpression;
  body: BabelNodeClassBody;
  decorators?: any;
  mixins?: any;
  superTypeParameters?: ?BabelNodeTypeParameterInstantiation;
  typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop;
}

declare class BabelNodeExportAllDeclaration extends BabelNode {
  type: "ExportAllDeclaration";
  source: BabelNodeStringLiteral;
}

declare class BabelNodeExportDefaultDeclaration extends BabelNode {
  type: "ExportDefaultDeclaration";
  declaration: BabelNodeFunctionDeclaration | BabelNodeTSDeclareFunction | BabelNodeClassDeclaration | BabelNodeExpression;
}

declare class BabelNodeExportNamedDeclaration extends BabelNode {
  type: "ExportNamedDeclaration";
  declaration?: ?BabelNodeDeclaration;
  specifiers: any;
  source?: ?BabelNodeStringLiteral;
}

declare class BabelNodeExportSpecifier extends BabelNode {
  type: "ExportSpecifier";
  local: BabelNodeIdentifier;
  exported: BabelNodeIdentifier;
}

declare class BabelNodeForOfStatement extends BabelNode {
  type: "ForOfStatement";
  left: BabelNodeVariableDeclaration | BabelNodeLVal;
  right: BabelNodeExpression;
  body: BabelNodeStatement;
}

declare class BabelNodeImportDeclaration extends BabelNode {
  type: "ImportDeclaration";
  specifiers: any;
  source: BabelNodeStringLiteral;
}

declare class BabelNodeImportDefaultSpecifier extends BabelNode {
  type: "ImportDefaultSpecifier";
  local: BabelNodeIdentifier;
}

declare class BabelNodeImportNamespaceSpecifier extends BabelNode {
  type: "ImportNamespaceSpecifier";
  local: BabelNodeIdentifier;
}

declare class BabelNodeImportSpecifier extends BabelNode {
  type: "ImportSpecifier";
  local: BabelNodeIdentifier;
  imported: BabelNodeIdentifier;
  importKind?: null | "type" | "typeof";
}

declare class BabelNodeMetaProperty extends BabelNode {
  type: "MetaProperty";
  meta: BabelNodeIdentifier;
  property: BabelNodeIdentifier;
}

declare class BabelNodeClassMethod extends BabelNode {
  type: "ClassMethod";
  kind?: any;
  key: any;
  params: any;
  body: BabelNodeBlockStatement;
  computed?: boolean;
  abstract?: boolean;
  access?: any;
  accessibility?: any;
  async?: boolean;
  decorators?: any;
  generator?: boolean;
  optional?: boolean;
  returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
  typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop;
}

declare class BabelNodeObjectPattern extends BabelNode {
  type: "ObjectPattern";
  properties: any;
  decorators?: any;
  typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
}

declare class BabelNodeSpreadElement extends BabelNode {
  type: "SpreadElement";
  argument: BabelNodeExpression;
}

declare class BabelNodeSuper extends BabelNode {
  type: "Super";
}

declare class BabelNodeTaggedTemplateExpression extends BabelNode {
  type: "TaggedTemplateExpression";
  tag: BabelNodeExpression;
  quasi: BabelNodeTemplateLiteral;
}

declare class BabelNodeTemplateElement extends BabelNode {
  type: "TemplateElement";
  value: any;
  tail?: boolean;
}

declare class BabelNodeTemplateLiteral extends BabelNode {
  type: "TemplateLiteral";
  quasis: any;
  expressions: any;
}

declare class BabelNodeYieldExpression extends BabelNode {
  type: "YieldExpression";
  argument?: ?BabelNodeExpression;
  delegate?: boolean;
}

declare class BabelNodeAnyTypeAnnotation extends BabelNode {
  type: "AnyTypeAnnotation";
}

declare class BabelNodeArrayTypeAnnotation extends BabelNode {
  type: "ArrayTypeAnnotation";
  elementType: any;
}

declare class BabelNodeBooleanTypeAnnotation extends BabelNode {
  type: "BooleanTypeAnnotation";
}

declare class BabelNodeBooleanLiteralTypeAnnotation extends BabelNode {
  type: "BooleanLiteralTypeAnnotation";
}

declare class BabelNodeNullLiteralTypeAnnotation extends BabelNode {
  type: "NullLiteralTypeAnnotation";
}

declare class BabelNodeClassImplements extends BabelNode {
  type: "ClassImplements";
  id: any;
  typeParameters: any;
}

declare class BabelNodeDeclareClass extends BabelNode {
  type: "DeclareClass";
  id: any;
  typeParameters: any;
  body: any;
}

declare class BabelNodeDeclareFunction extends BabelNode {
  type: "DeclareFunction";
  id: any;
}

declare class BabelNodeDeclareInterface extends BabelNode {
  type: "DeclareInterface";
  id: any;
  typeParameters: any;
  body: any;
}

declare class BabelNodeDeclareModule extends BabelNode {
  type: "DeclareModule";
  id: any;
  body: any;
}

declare class BabelNodeDeclareModuleExports extends BabelNode {
  type: "DeclareModuleExports";
  typeAnnotation: any;
}

declare class BabelNodeDeclareTypeAlias extends BabelNode {
  type: "DeclareTypeAlias";
  id: any;
  typeParameters: any;
  right: any;
}

declare class BabelNodeDeclareOpaqueType extends BabelNode {
  type: "DeclareOpaqueType";
  id: any;
  typeParameters: any;
  supertype: any;
}

declare class BabelNodeDeclareVariable extends BabelNode {
  type: "DeclareVariable";
  id: any;
}

declare class BabelNodeDeclareExportDeclaration extends BabelNode {
  type: "DeclareExportDeclaration";
  declaration: any;
  specifiers: any;
  source: any;
}

declare class BabelNodeDeclareExportAllDeclaration extends BabelNode {
  type: "DeclareExportAllDeclaration";
  source: any;
}

declare class BabelNodeDeclaredPredicate extends BabelNode {
  type: "DeclaredPredicate";
  value: any;
}

declare class BabelNodeExistsTypeAnnotation extends BabelNode {
  type: "ExistsTypeAnnotation";
}

declare class BabelNodeFunctionTypeAnnotation extends BabelNode {
  type: "FunctionTypeAnnotation";
  typeParameters: any;
  params: any;
  rest: any;
  returnType: any;
}

declare class BabelNodeFunctionTypeParam extends BabelNode {
  type: "FunctionTypeParam";
  name: any;
  typeAnnotation: any;
}

declare class BabelNodeGenericTypeAnnotation extends BabelNode {
  type: "GenericTypeAnnotation";
  id: any;
  typeParameters: any;
}

declare class BabelNodeInferredPredicate extends BabelNode {
  type: "InferredPredicate";
}

declare class BabelNodeInterfaceExtends extends BabelNode {
  type: "InterfaceExtends";
  id: any;
  typeParameters: any;
}

declare class BabelNodeInterfaceDeclaration extends BabelNode {
  type: "InterfaceDeclaration";
  id: any;
  typeParameters: any;
  body: any;
}

declare class BabelNodeIntersectionTypeAnnotation extends BabelNode {
  type: "IntersectionTypeAnnotation";
  types: any;
}

declare class BabelNodeMixedTypeAnnotation extends BabelNode {
  type: "MixedTypeAnnotation";
}

declare class BabelNodeEmptyTypeAnnotation extends BabelNode {
  type: "EmptyTypeAnnotation";
}

declare class BabelNodeNullableTypeAnnotation extends BabelNode {
  type: "NullableTypeAnnotation";
  typeAnnotation: any;
}

declare class BabelNodeNumberLiteralTypeAnnotation extends BabelNode {
  type: "NumberLiteralTypeAnnotation";
}

declare class BabelNodeNumberTypeAnnotation extends BabelNode {
  type: "NumberTypeAnnotation";
}

declare class BabelNodeStringLiteralTypeAnnotation extends BabelNode {
  type: "StringLiteralTypeAnnotation";
}

declare class BabelNodeStringTypeAnnotation extends BabelNode {
  type: "StringTypeAnnotation";
}

declare class BabelNodeThisTypeAnnotation extends BabelNode {
  type: "ThisTypeAnnotation";
}

declare class BabelNodeTupleTypeAnnotation extends BabelNode {
  type: "TupleTypeAnnotation";
  types: any;
}

declare class BabelNodeTypeofTypeAnnotation extends BabelNode {
  type: "TypeofTypeAnnotation";
  argument: any;
}

declare class BabelNodeTypeAlias extends BabelNode {
  type: "TypeAlias";
  id: any;
  typeParameters: any;
  right: any;
}

declare class BabelNodeOpaqueType extends BabelNode {
  type: "OpaqueType";
  id: any;
  typeParameters: any;
  supertype: any;
  impltype: any;
}

declare class BabelNodeTypeCastExpression extends BabelNode {
  type: "TypeCastExpression";
  expression: any;
  typeAnnotation: any;
}

declare class BabelNodeObjectTypeAnnotation extends BabelNode {
  type: "ObjectTypeAnnotation";
  properties: any;
  indexers: any;
  callProperties: any;
}

declare class BabelNodeObjectTypeCallProperty extends BabelNode {
  type: "ObjectTypeCallProperty";
  value: any;
}

declare class BabelNodeObjectTypeIndexer extends BabelNode {
  type: "ObjectTypeIndexer";
  id: any;
  key: any;
  value: any;
}

declare class BabelNodeObjectTypeProperty extends BabelNode {
  type: "ObjectTypeProperty";
  key: any;
  value: any;
}

declare class BabelNodeObjectTypeSpreadProperty extends BabelNode {
  type: "ObjectTypeSpreadProperty";
  argument: any;
}

declare class BabelNodeQualifiedTypeIdentifier extends BabelNode {
  type: "QualifiedTypeIdentifier";
  id: any;
  qualification: any;
}

declare class BabelNodeUnionTypeAnnotation extends BabelNode {
  type: "UnionTypeAnnotation";
  types: any;
}

declare class BabelNodeVoidTypeAnnotation extends BabelNode {
  type: "VoidTypeAnnotation";
}

declare class BabelNodeJSXAttribute extends BabelNode {
  type: "JSXAttribute";
  name: BabelNodeJSXIdentifier | BabelNodeJSXNamespacedName;
  value?: ?BabelNodeJSXElement | BabelNodeStringLiteral | BabelNodeJSXExpressionContainer;
}

declare class BabelNodeJSXClosingElement extends BabelNode {
  type: "JSXClosingElement";
  name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression;
}

declare class BabelNodeJSXElement extends BabelNode {
  type: "JSXElement";
  openingElement: BabelNodeJSXOpeningElement;
  closingElement?: ?BabelNodeJSXClosingElement;
  children: any;
  selfClosing: any;
}

declare class BabelNodeJSXEmptyExpression extends BabelNode {
  type: "JSXEmptyExpression";
}

declare class BabelNodeJSXExpressionContainer extends BabelNode {
  type: "JSXExpressionContainer";
  expression: BabelNodeExpression;
}

declare class BabelNodeJSXSpreadChild extends BabelNode {
  type: "JSXSpreadChild";
  expression: BabelNodeExpression;
}

declare class BabelNodeJSXIdentifier extends BabelNode {
  type: "JSXIdentifier";
  name: string;
}

declare class BabelNodeJSXMemberExpression extends BabelNode {
  type: "JSXMemberExpression";
  object: BabelNodeJSXMemberExpression | BabelNodeJSXIdentifier;
  property: BabelNodeJSXIdentifier;
}

declare class BabelNodeJSXNamespacedName extends BabelNode {
  type: "JSXNamespacedName";
  namespace: BabelNodeJSXIdentifier;
  name: BabelNodeJSXIdentifier;
}

declare class BabelNodeJSXOpeningElement extends BabelNode {
  type: "JSXOpeningElement";
  name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression;
  attributes: any;
  selfClosing?: boolean;
}

declare class BabelNodeJSXSpreadAttribute extends BabelNode {
  type: "JSXSpreadAttribute";
  argument: BabelNodeExpression;
}

declare class BabelNodeJSXText extends BabelNode {
  type: "JSXText";
  value: string;
}

declare class BabelNodeNoop extends BabelNode {
  type: "Noop";
}

declare class BabelNodeParenthesizedExpression extends BabelNode {
  type: "ParenthesizedExpression";
  expression: BabelNodeExpression;
}

declare class BabelNodeAwaitExpression extends BabelNode {
  type: "AwaitExpression";
  argument: BabelNodeExpression;
}

declare class BabelNodeBindExpression extends BabelNode {
  type: "BindExpression";
  object: any;
  callee: any;
}

declare class BabelNodeImport extends BabelNode {
  type: "Import";
}

declare class BabelNodeDecorator extends BabelNode {
  type: "Decorator";
  expression: BabelNodeExpression;
}

declare class BabelNodeDoExpression extends BabelNode {
  type: "DoExpression";
  body: BabelNodeBlockStatement;
}

declare class BabelNodeExportDefaultSpecifier extends BabelNode {
  type: "ExportDefaultSpecifier";
  exported: BabelNodeIdentifier;
}

declare class BabelNodeExportNamespaceSpecifier extends BabelNode {
  type: "ExportNamespaceSpecifier";
  exported: BabelNodeIdentifier;
}

declare class BabelNodeTypeAnnotation extends BabelNode {
  type: "TypeAnnotation";
  typeAnnotation: BabelNodeTSType | BabelNodeFlow;
}

declare class BabelNodeTypeParameterInstantiation extends BabelNode {
  type: "TypeParameterInstantiation";
  params: any;
}

declare class BabelNodeTypeParameterDeclaration extends BabelNode {
  type: "TypeParameterDeclaration";
  params: any;
}

declare class BabelNodeTypeParameter extends BabelNode {
  type: "TypeParameter";
  bound?: ?BabelNodeTypeAnnotation;
  constraint?: ?BabelNodeTSType;
  name?: string;
}

declare class BabelNodeClassProperty extends BabelNode {
  type: "ClassProperty";
  key: any;
  value?: ?BabelNodeExpression;
  typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
  decorators?: any;
  computed?: boolean;
  abstract?: boolean;
  accessibility?: any;
  optional?: boolean;
  readonly?: boolean;
}

declare class BabelNodeTSParameterProperty extends BabelNode {
  type: "TSParameterProperty";
  parameter: BabelNodeIdentifier | BabelNodeAssignmentPattern;
  accessibility?: "public" | "private" | "protected";
  readonly?: boolean;
}

declare class BabelNodeTSDeclareFunction extends BabelNode {
  type: "TSDeclareFunction";
  id?: ?BabelNodeIdentifier;
  typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop;
  params: any;
  returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
  async?: boolean;
  declare?: boolean;
  generator?: boolean;
}

declare class BabelNodeTSDeclareMethod extends BabelNode {
  type: "TSDeclareMethod";
  decorators?: any;
  key: any;
  typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop;
  params: any;
  returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop;
  abstract?: boolean;
  access?: any;
  accessibility?: any;
  async?: boolean;
  computed?: boolean;
  generator?: boolean;
  kind?: any;
  optional?: boolean;
}

declare class BabelNodeTSQualifiedName extends BabelNode {
  type: "TSQualifiedName";
  left: BabelNodeTSEntityName;
  right: BabelNodeIdentifier;
}

declare class BabelNodeTSCallSignatureDeclaration extends BabelNode {
  type: "TSCallSignatureDeclaration";
  typeParameters?: ?BabelNodeTypeParameterDeclaration;
  parameters?: any;
  typeAnnotation?: ?BabelNodeTypeAnnotation;
}

declare class BabelNodeTSConstructSignatureDeclaration extends BabelNode {
  type: "TSConstructSignatureDeclaration";
  typeParameters?: ?BabelNodeTypeParameterDeclaration;
  parameters?: any;
  typeAnnotation?: ?BabelNodeTypeAnnotation;
}

declare class BabelNodeTSPropertySignature extends BabelNode {
  type: "TSPropertySignature";
  key: BabelNodeExpression;
  typeAnnotation?: ?BabelNodeTypeAnnotation;
  initializer?: ?BabelNodeExpression;
  computed?: boolean;
  optional?: boolean;
  readonly?: boolean;
}

declare class BabelNodeTSMethodSignature extends BabelNode {
  type: "TSMethodSignature";
  key: BabelNodeExpression;
  typeParameters?: ?BabelNodeTypeParameterDeclaration;
  parameters?: any;
  typeAnnotation?: ?BabelNodeTypeAnnotation;
  computed?: boolean;
  optional?: boolean;
}

declare class BabelNodeTSIndexSignature extends BabelNode {
  type: "TSIndexSignature";
  parameters: any;
  typeAnnotation?: ?BabelNodeTypeAnnotation;
  readonly?: boolean;
}

declare class BabelNodeTSAnyKeyword extends BabelNode {
  type: "TSAnyKeyword";
}

declare class BabelNodeTSNumberKeyword extends BabelNode {
  type: "TSNumberKeyword";
}

declare class BabelNodeTSObjectKeyword extends BabelNode {
  type: "TSObjectKeyword";
}

declare class BabelNodeTSBooleanKeyword extends BabelNode {
  type: "TSBooleanKeyword";
}

declare class BabelNodeTSStringKeyword extends BabelNode {
  type: "TSStringKeyword";
}

declare class BabelNodeTSSymbolKeyword extends BabelNode {
  type: "TSSymbolKeyword";
}

declare class BabelNodeTSVoidKeyword extends BabelNode {
  type: "TSVoidKeyword";
}

declare class BabelNodeTSUndefinedKeyword extends BabelNode {
  type: "TSUndefinedKeyword";
}

declare class BabelNodeTSNullKeyword extends BabelNode {
  type: "TSNullKeyword";
}

declare class BabelNodeTSNeverKeyword extends BabelNode {
  type: "TSNeverKeyword";
}

declare class BabelNodeTSThisType extends BabelNode {
  type: "TSThisType";
}

declare class BabelNodeTSFunctionType extends BabelNode {
  type: "TSFunctionType";
  typeParameters?: ?BabelNodeTypeParameterDeclaration;
  typeAnnotation?: ?BabelNodeTypeAnnotation;
  parameters?: any;
}

declare class BabelNodeTSConstructorType extends BabelNode {
  type: "TSConstructorType";
  typeParameters?: ?BabelNodeTypeParameterDeclaration;
  typeAnnotation?: ?BabelNodeTypeAnnotation;
  parameters?: any;
}

declare class BabelNodeTSTypeReference extends BabelNode {
  type: "TSTypeReference";
  typeName: BabelNodeTSEntityName;
  typeParameters?: ?BabelNodeTypeParameterInstantiation;
}

declare class BabelNodeTSTypePredicate extends BabelNode {
  type: "TSTypePredicate";
  parameterName: BabelNodeIdentifier | BabelNodeTSThisType;
  typeAnnotation: BabelNodeTypeAnnotation;
}

declare class BabelNodeTSTypeQuery extends BabelNode {
  type: "TSTypeQuery";
  exprName: BabelNodeTSEntityName;
}

declare class BabelNodeTSTypeLiteral extends BabelNode {
  type: "TSTypeLiteral";
  members: any;
}

declare class BabelNodeTSArrayType extends BabelNode {
  type: "TSArrayType";
  elementType: BabelNodeTSType;
}

declare class BabelNodeTSTupleType extends BabelNode {
  type: "TSTupleType";
  elementTypes: any;
}

declare class BabelNodeTSUnionType extends BabelNode {
  type: "TSUnionType";
  types: any;
}

declare class BabelNodeTSIntersectionType extends BabelNode {
  type: "TSIntersectionType";
  types: any;
}

declare class BabelNodeTSParenthesizedType extends BabelNode {
  type: "TSParenthesizedType";
  typeAnnotation: BabelNodeTSType;
}

declare class BabelNodeTSTypeOperator extends BabelNode {
  type: "TSTypeOperator";
  typeAnnotation: BabelNodeTSType;
  operator?: string;
}

declare class BabelNodeTSIndexedAccessType extends BabelNode {
  type: "TSIndexedAccessType";
  objectType: BabelNodeTSType;
  indexType: BabelNodeTSType;
}

declare class BabelNodeTSMappedType extends BabelNode {
  type: "TSMappedType";
  typeParameter: BabelNodeTypeParameter;
  typeAnnotation?: ?BabelNodeTSType;
  optional?: boolean;
  readonly?: boolean;
}

declare class BabelNodeTSLiteralType extends BabelNode {
  type: "TSLiteralType";
  literal: BabelNodeNumericLiteral | BabelNodeStringLiteral | BabelNodeBooleanLiteral;
}

declare class BabelNodeTSExpressionWithTypeArguments extends BabelNode {
  type: "TSExpressionWithTypeArguments";
  expression: BabelNodeTSEntityName;
  typeParameters?: ?BabelNodeTypeParameterInstantiation;
}

declare class BabelNodeTSInterfaceDeclaration extends BabelNode {
  type: "TSInterfaceDeclaration";
  id: BabelNodeIdentifier;
  typeParameters?: ?BabelNodeTypeParameterDeclaration;
  body: BabelNodeTSInterfaceBody;
  declare?: boolean;
}

declare class BabelNodeTSInterfaceBody extends BabelNode {
  type: "TSInterfaceBody";
  body: any;
}

declare class BabelNodeTSTypeAliasDeclaration extends BabelNode {
  type: "TSTypeAliasDeclaration";
  id: BabelNodeIdentifier;
  typeParameters?: ?BabelNodeTypeParameterDeclaration;
  typeAnnotation: BabelNodeTSType;
  declare?: boolean;
}

declare class BabelNodeTSAsExpression extends BabelNode {
  type: "TSAsExpression";
  expression: BabelNodeExpression;
  typeAnnotation: BabelNodeTSType;
}

declare class BabelNodeTSTypeAssertion extends BabelNode {
  type: "TSTypeAssertion";
  typeAnnotation: BabelNodeTSType;
  expression: BabelNodeExpression;
}

declare class BabelNodeTSEnumDeclaration extends BabelNode {
  type: "TSEnumDeclaration";
  id: BabelNodeIdentifier;
  members: any;
  declare?: boolean;
  initializer?: ?BabelNodeExpression;
}

declare class BabelNodeTSEnumMember extends BabelNode {
  type: "TSEnumMember";
  id: BabelNodeIdentifier | BabelNodeStringLiteral;
  initializer?: ?BabelNodeExpression;
}

declare class BabelNodeTSModuleDeclaration extends BabelNode {
  type: "TSModuleDeclaration";
  id: BabelNodeIdentifier | BabelNodeStringLiteral;
  body: BabelNodeTSModuleBlock | BabelNodeTSModuleDeclaration;
  declare?: boolean;
  global?: boolean;
}

declare class BabelNodeTSModuleBlock extends BabelNode {
  type: "TSModuleBlock";
  body: any;
}

declare class BabelNodeTSImportEqualsDeclaration extends BabelNode {
  type: "TSImportEqualsDeclaration";
  id: BabelNodeIdentifier;
  moduleReference: BabelNodeTSEntityName | BabelNodeTSExternalModuleReference;
  isExport?: boolean;
}

declare class BabelNodeTSExternalModuleReference extends BabelNode {
  type: "TSExternalModuleReference";
  expression: BabelNodeStringLiteral;
}

declare class BabelNodeTSNonNullExpression extends BabelNode {
  type: "TSNonNullExpression";
  expression: BabelNodeExpression;
}

declare class BabelNodeTSExportAssignment extends BabelNode {
  type: "TSExportAssignment";
  expression: BabelNodeExpression;
}

declare class BabelNodeTSNamespaceExportDeclaration extends BabelNode {
  type: "TSNamespaceExportDeclaration";
  id: BabelNodeIdentifier;
}

type BabelNodeExpression = BabelNodeArrayExpression | BabelNodeAssignmentExpression | BabelNodeBinaryExpression | BabelNodeCallExpression | BabelNodeConditionalExpression | BabelNodeFunctionExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeLogicalExpression | BabelNodeMemberExpression | BabelNodeNewExpression | BabelNodeObjectExpression | BabelNodeSequenceExpression | BabelNodeThisExpression | BabelNodeUnaryExpression | BabelNodeUpdateExpression | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeMetaProperty | BabelNodeSuper | BabelNodeTaggedTemplateExpression | BabelNodeTemplateLiteral | BabelNodeYieldExpression | BabelNodeTypeCastExpression | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeParenthesizedExpression | BabelNodeAwaitExpression | BabelNodeBindExpression | BabelNodeImport | BabelNodeDoExpression | BabelNodeTSAsExpression | BabelNodeTSTypeAssertion | BabelNodeTSNonNullExpression;
type BabelNodeBinary = BabelNodeBinaryExpression | BabelNodeLogicalExpression;
type BabelNodeScopable = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression | BabelNodeForOfStatement | BabelNodeClassMethod;
type BabelNodeBlockParent = BabelNodeBlockStatement | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeForOfStatement | BabelNodeClassMethod;
type BabelNodeBlock = BabelNodeBlockStatement | BabelNodeProgram;
type BabelNodeStatement = BabelNodeBlockStatement | BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeDebuggerStatement | BabelNodeDoWhileStatement | BabelNodeEmptyStatement | BabelNodeExpressionStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeIfStatement | BabelNodeLabeledStatement | BabelNodeReturnStatement | BabelNodeSwitchStatement | BabelNodeThrowStatement | BabelNodeTryStatement | BabelNodeVariableDeclaration | BabelNodeWhileStatement | BabelNodeWithStatement | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeForOfStatement | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType | BabelNodeTSDeclareFunction | BabelNodeTSInterfaceDeclaration | BabelNodeTSTypeAliasDeclaration | BabelNodeTSEnumDeclaration | BabelNodeTSModuleDeclaration | BabelNodeTSImportEqualsDeclaration | BabelNodeTSExportAssignment | BabelNodeTSNamespaceExportDeclaration;
type BabelNodeTerminatorless = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement | BabelNodeYieldExpression | BabelNodeAwaitExpression;
type BabelNodeCompletionStatement = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement;
type BabelNodeConditional = BabelNodeConditionalExpression | BabelNodeIfStatement;
type BabelNodeLoop = BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeWhileStatement | BabelNodeForOfStatement;
type BabelNodeWhile = BabelNodeDoWhileStatement | BabelNodeWhileStatement;
type BabelNodeExpressionWrapper = BabelNodeExpressionStatement | BabelNodeTypeCastExpression | BabelNodeParenthesizedExpression;
type BabelNodeFor = BabelNodeForInStatement | BabelNodeForStatement | BabelNodeForOfStatement;
type BabelNodeForXStatement = BabelNodeForInStatement | BabelNodeForOfStatement;
type BabelNodeFunction = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod;
type BabelNodeFunctionParent = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod;
type BabelNodePureish = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression;
type BabelNodeDeclaration = BabelNodeFunctionDeclaration | BabelNodeVariableDeclaration | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType | BabelNodeTSDeclareFunction | BabelNodeTSInterfaceDeclaration | BabelNodeTSTypeAliasDeclaration | BabelNodeTSEnumDeclaration | BabelNodeTSModuleDeclaration;
type BabelNodePatternLike = BabelNodeIdentifier | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern;
type BabelNodeLVal = BabelNodeIdentifier | BabelNodeMemberExpression | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern | BabelNodeTSParameterProperty;
type BabelNodeTSEntityName = BabelNodeIdentifier | BabelNodeTSQualifiedName;
type BabelNodeLiteral = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeTemplateLiteral;
type BabelNodeImmutable = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXOpeningElement | BabelNodeJSXText;
type BabelNodeUserWhitespacable = BabelNodeObjectMethod | BabelNodeObjectProperty | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty;
type BabelNodeMethod = BabelNodeObjectMethod | BabelNodeClassMethod;
type BabelNodeObjectMember = BabelNodeObjectMethod | BabelNodeObjectProperty;
type BabelNodeProperty = BabelNodeObjectProperty | BabelNodeClassProperty;
type BabelNodeUnaryLike = BabelNodeUnaryExpression | BabelNodeSpreadElement;
type BabelNodePattern = BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern;
type BabelNodeClass = BabelNodeClassDeclaration | BabelNodeClassExpression;
type BabelNodeModuleDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration;
type BabelNodeExportDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration;
type BabelNodeModuleSpecifier = BabelNodeExportSpecifier | BabelNodeImportDefaultSpecifier | BabelNodeImportNamespaceSpecifier | BabelNodeImportSpecifier | BabelNodeExportDefaultSpecifier | BabelNodeExportNamespaceSpecifier;
type BabelNodeFlow = BabelNodeAnyTypeAnnotation | BabelNodeArrayTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeBooleanLiteralTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeClassImplements | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeDeclaredPredicate | BabelNodeExistsTypeAnnotation | BabelNodeFunctionTypeAnnotation | BabelNodeFunctionTypeParam | BabelNodeGenericTypeAnnotation | BabelNodeInferredPredicate | BabelNodeInterfaceExtends | BabelNodeInterfaceDeclaration | BabelNodeIntersectionTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNullableTypeAnnotation | BabelNodeNumberLiteralTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringLiteralTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeTupleTypeAnnotation | BabelNodeTypeofTypeAnnotation | BabelNodeTypeAlias | BabelNodeOpaqueType | BabelNodeTypeCastExpression | BabelNodeObjectTypeAnnotation | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty | BabelNodeQualifiedTypeIdentifier | BabelNodeUnionTypeAnnotation | BabelNodeVoidTypeAnnotation | BabelNodeTypeAnnotation | BabelNodeTypeParameterInstantiation | BabelNodeTypeParameterDeclaration | BabelNodeTypeParameter;
type BabelNodeFlowBaseAnnotation = BabelNodeAnyTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeVoidTypeAnnotation;
type BabelNodeFlowDeclaration = BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType;
type BabelNodeFlowPredicate = BabelNodeDeclaredPredicate | BabelNodeInferredPredicate;
type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText;
type BabelNodeTSTypeElement = BabelNodeTSCallSignatureDeclaration | BabelNodeTSConstructSignatureDeclaration | BabelNodeTSPropertySignature | BabelNodeTSMethodSignature | BabelNodeTSIndexSignature;
type BabelNodeTSType = BabelNodeTSAnyKeyword | BabelNodeTSNumberKeyword | BabelNodeTSObjectKeyword | BabelNodeTSBooleanKeyword | BabelNodeTSStringKeyword | BabelNodeTSSymbolKeyword | BabelNodeTSVoidKeyword | BabelNodeTSUndefinedKeyword | BabelNodeTSNullKeyword | BabelNodeTSNeverKeyword | BabelNodeTSThisType | BabelNodeTSFunctionType | BabelNodeTSConstructorType | BabelNodeTSTypeReference | BabelNodeTSTypePredicate | BabelNodeTSTypeQuery | BabelNodeTSTypeLiteral | BabelNodeTSArrayType | BabelNodeTSTupleType | BabelNodeTSUnionType | BabelNodeTSIntersectionType | BabelNodeTSParenthesizedType | BabelNodeTSTypeOperator | BabelNodeTSIndexedAccessType | BabelNodeTSMappedType | BabelNodeTSLiteralType | BabelNodeTSExpressionWithTypeArguments;

declare module "babel-types" {
  declare function arrayExpression(elements?: any): BabelNodeArrayExpression;
  declare function assignmentExpression(operator: string, left: BabelNodeLVal, right: BabelNodeExpression): BabelNodeAssignmentExpression;
  declare function binaryExpression(operator: "+" | "-" | "/" | "%" | "*" | "**" | "&" | "|" | ">>" | ">>>" | "<<" | "^" | "==" | "===" | "!=" | "!==" | "in" | "instanceof" | ">" | "<" | ">=" | "<=", left: BabelNodeExpression, right: BabelNodeExpression): BabelNodeBinaryExpression;
  declare function directive(value: BabelNodeDirectiveLiteral): BabelNodeDirective;
  declare function directiveLiteral(value: string): BabelNodeDirectiveLiteral;
  declare function blockStatement(body: any, directives?: any): BabelNodeBlockStatement;
  declare function breakStatement(label?: ?BabelNodeIdentifier): BabelNodeBreakStatement;
  declare function callExpression(callee: BabelNodeExpression, _arguments: any, optional?: true | false, typeParameters?: ?BabelNodeTypeParameterInstantiation): BabelNodeCallExpression;
  declare function catchClause(param?: ?BabelNodeIdentifier, body: BabelNodeBlockStatement): BabelNodeCatchClause;
  declare function conditionalExpression(test: BabelNodeExpression, consequent: BabelNodeExpression, alternate: BabelNodeExpression): BabelNodeConditionalExpression;
  declare function continueStatement(label?: ?BabelNodeIdentifier): BabelNodeContinueStatement;
  declare function debuggerStatement(): BabelNodeDebuggerStatement;
  declare function doWhileStatement(test: BabelNodeExpression, body: BabelNodeStatement): BabelNodeDoWhileStatement;
  declare function emptyStatement(): BabelNodeEmptyStatement;
  declare function expressionStatement(expression: BabelNodeExpression): BabelNodeExpressionStatement;
  declare function file(program: BabelNodeProgram, comments: any, tokens: any): BabelNodeFile;
  declare function forInStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement): BabelNodeForInStatement;
  declare function forStatement(init?: ?BabelNodeVariableDeclaration | BabelNodeExpression, test?: ?BabelNodeExpression, update?: ?BabelNodeExpression, body: BabelNodeStatement): BabelNodeForStatement;
  declare function functionDeclaration(id?: ?BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, declare?: boolean, returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop, typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop): BabelNodeFunctionDeclaration;
  declare function functionExpression(id?: ?BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop, typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop): BabelNodeFunctionExpression;
  declare function identifier(name: any, decorators?: any, optional?: boolean, typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop): BabelNodeIdentifier;
  declare function ifStatement(test: BabelNodeExpression, consequent: BabelNodeStatement, alternate?: ?BabelNodeStatement): BabelNodeIfStatement;
  declare function labeledStatement(label: BabelNodeIdentifier, body: BabelNodeStatement): BabelNodeLabeledStatement;
  declare function stringLiteral(value: string): BabelNodeStringLiteral;
  declare function numericLiteral(value: number): BabelNodeNumericLiteral;
  declare function nullLiteral(): BabelNodeNullLiteral;
  declare function booleanLiteral(value: boolean): BabelNodeBooleanLiteral;
  declare function regExpLiteral(pattern: string, flags?: string): BabelNodeRegExpLiteral;
  declare function logicalExpression(operator: "||" | "&&", left: BabelNodeExpression, right: BabelNodeExpression): BabelNodeLogicalExpression;
  declare function memberExpression(object: BabelNodeExpression, property: any, computed?: boolean, optional?: true | false): BabelNodeMemberExpression;
  declare function newExpression(callee: BabelNodeExpression, _arguments: any, optional?: true | false, typeParameters?: ?BabelNodeTypeParameterInstantiation): BabelNodeNewExpression;
  declare function program(body: any, directives?: any, sourceFile?: string): BabelNodeProgram;
  declare function objectExpression(properties: any): BabelNodeObjectExpression;
  declare function objectMethod(kind?: any, key: any, params: any, body: BabelNodeBlockStatement, computed?: boolean, async?: boolean, decorators?: any, generator?: boolean, returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop, typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop): BabelNodeObjectMethod;
  declare function objectProperty(key: any, value: BabelNodeExpression | BabelNodePatternLike, computed?: boolean, shorthand?: boolean, decorators?: any): BabelNodeObjectProperty;
  declare function restElement(argument: BabelNodeLVal, decorators?: any, typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop): BabelNodeRestElement;
  declare function returnStatement(argument?: ?BabelNodeExpression): BabelNodeReturnStatement;
  declare function sequenceExpression(expressions: any): BabelNodeSequenceExpression;
  declare function switchCase(test?: ?BabelNodeExpression, consequent: any): BabelNodeSwitchCase;
  declare function switchStatement(discriminant: BabelNodeExpression, cases: any): BabelNodeSwitchStatement;
  declare function thisExpression(): BabelNodeThisExpression;
  declare function throwStatement(argument: BabelNodeExpression): BabelNodeThrowStatement;
  declare function tryStatement(block: any, handler?: ?BabelNodeBlockStatement, finalizer?: ?BabelNodeBlockStatement, body?: ?BabelNodeBlockStatement): BabelNodeTryStatement;
  declare function unaryExpression(operator: "void" | "delete" | "!" | "+" | "-" | "~" | "typeof", argument: BabelNodeExpression, prefix?: boolean): BabelNodeUnaryExpression;
  declare function updateExpression(operator: "++" | "--", argument: BabelNodeExpression, prefix?: boolean): BabelNodeUpdateExpression;
  declare function variableDeclaration(kind: any, declarations: any, declare?: boolean): BabelNodeVariableDeclaration;
  declare function variableDeclarator(id: BabelNodeLVal, init?: ?BabelNodeExpression): BabelNodeVariableDeclarator;
  declare function whileStatement(test: BabelNodeExpression, body: BabelNodeBlockStatement | BabelNodeStatement): BabelNodeWhileStatement;
  declare function withStatement(object: any, body: BabelNodeBlockStatement | BabelNodeStatement): BabelNodeWithStatement;
  declare function assignmentPattern(left: BabelNodeIdentifier | BabelNodeObjectPattern | BabelNodeArrayPattern, right: BabelNodeExpression, decorators?: any, typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop): BabelNodeAssignmentPattern;
  declare function arrayPattern(elements: any, decorators?: any, typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop): BabelNodeArrayPattern;
  declare function arrowFunctionExpression(params: any, body: BabelNodeBlockStatement | BabelNodeExpression, async?: boolean, expression?: boolean, generator?: boolean, returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop, typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop): BabelNodeArrowFunctionExpression;
  declare function classBody(body: any): BabelNodeClassBody;
  declare function classDeclaration(id?: ?BabelNodeIdentifier, superClass?: ?BabelNodeExpression, body: BabelNodeClassBody, decorators?: any, abstract?: boolean, declare?: boolean, _implements?: any, mixins?: any, superTypeParameters?: ?BabelNodeTypeParameterInstantiation, typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop): BabelNodeClassDeclaration;
  declare function classExpression(id?: ?BabelNodeIdentifier, superClass?: ?BabelNodeExpression, body: BabelNodeClassBody, decorators?: any, _implements?: any, mixins?: any, superTypeParameters?: ?BabelNodeTypeParameterInstantiation, typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop): BabelNodeClassExpression;
  declare function exportAllDeclaration(source: BabelNodeStringLiteral): BabelNodeExportAllDeclaration;
  declare function exportDefaultDeclaration(declaration: BabelNodeFunctionDeclaration | BabelNodeTSDeclareFunction | BabelNodeClassDeclaration | BabelNodeExpression): BabelNodeExportDefaultDeclaration;
  declare function exportNamedDeclaration(declaration?: ?BabelNodeDeclaration, specifiers: any, source?: ?BabelNodeStringLiteral): BabelNodeExportNamedDeclaration;
  declare function exportSpecifier(local: BabelNodeIdentifier, exported: BabelNodeIdentifier): BabelNodeExportSpecifier;
  declare function forOfStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement, _await?: boolean): BabelNodeForOfStatement;
  declare function importDeclaration(specifiers: any, source: BabelNodeStringLiteral): BabelNodeImportDeclaration;
  declare function importDefaultSpecifier(local: BabelNodeIdentifier): BabelNodeImportDefaultSpecifier;
  declare function importNamespaceSpecifier(local: BabelNodeIdentifier): BabelNodeImportNamespaceSpecifier;
  declare function importSpecifier(local: BabelNodeIdentifier, imported: BabelNodeIdentifier, importKind?: null | "type" | "typeof"): BabelNodeImportSpecifier;
  declare function metaProperty(meta: BabelNodeIdentifier, property: BabelNodeIdentifier): BabelNodeMetaProperty;
  declare function classMethod(kind?: any, key: any, params: any, body: BabelNodeBlockStatement, computed?: boolean, _static?: boolean, abstract?: boolean, access?: any, accessibility?: any, async?: boolean, decorators?: any, generator?: boolean, optional?: boolean, returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop, typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop): BabelNodeClassMethod;
  declare function objectPattern(properties: any, decorators?: any, typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop): BabelNodeObjectPattern;
  declare function spreadElement(argument: BabelNodeExpression): BabelNodeSpreadElement;
  declare function taggedTemplateExpression(tag: BabelNodeExpression, quasi: BabelNodeTemplateLiteral): BabelNodeTaggedTemplateExpression;
  declare function templateElement(value: any, tail?: boolean): BabelNodeTemplateElement;
  declare function templateLiteral(quasis: any, expressions: any): BabelNodeTemplateLiteral;
  declare function yieldExpression(argument?: ?BabelNodeExpression, delegate?: boolean): BabelNodeYieldExpression;
  declare function anyTypeAnnotation(): BabelNodeAnyTypeAnnotation;
  declare function arrayTypeAnnotation(elementType: any): BabelNodeArrayTypeAnnotation;
  declare function booleanTypeAnnotation(): BabelNodeBooleanTypeAnnotation;
  declare function booleanLiteralTypeAnnotation(): BabelNodeBooleanLiteralTypeAnnotation;
  declare function nullLiteralTypeAnnotation(): BabelNodeNullLiteralTypeAnnotation;
  declare function classImplements(id: any, typeParameters: any): BabelNodeClassImplements;
  declare function declareClass(id: any, typeParameters: any, _extends: any, body: any): BabelNodeDeclareClass;
  declare function declareFunction(id: any): BabelNodeDeclareFunction;
  declare function declareInterface(id: any, typeParameters: any, _extends: any, body: any): BabelNodeDeclareInterface;
  declare function declareModule(id: any, body: any): BabelNodeDeclareModule;
  declare function declareModuleExports(typeAnnotation: any): BabelNodeDeclareModuleExports;
  declare function declareTypeAlias(id: any, typeParameters: any, right: any): BabelNodeDeclareTypeAlias;
  declare function declareOpaqueType(id: any, typeParameters: any, supertype: any): BabelNodeDeclareOpaqueType;
  declare function declareVariable(id: any): BabelNodeDeclareVariable;
  declare function declareExportDeclaration(declaration: any, specifiers: any, source: any): BabelNodeDeclareExportDeclaration;
  declare function declareExportAllDeclaration(source: any): BabelNodeDeclareExportAllDeclaration;
  declare function declaredPredicate(value: any): BabelNodeDeclaredPredicate;
  declare function existsTypeAnnotation(): BabelNodeExistsTypeAnnotation;
  declare function functionTypeAnnotation(typeParameters: any, params: any, rest: any, returnType: any): BabelNodeFunctionTypeAnnotation;
  declare function functionTypeParam(name: any, typeAnnotation: any): BabelNodeFunctionTypeParam;
  declare function genericTypeAnnotation(id: any, typeParameters: any): BabelNodeGenericTypeAnnotation;
  declare function inferredPredicate(): BabelNodeInferredPredicate;
  declare function interfaceExtends(id: any, typeParameters: any): BabelNodeInterfaceExtends;
  declare function interfaceDeclaration(id: any, typeParameters: any, _extends: any, body: any): BabelNodeInterfaceDeclaration;
  declare function intersectionTypeAnnotation(types: any): BabelNodeIntersectionTypeAnnotation;
  declare function mixedTypeAnnotation(): BabelNodeMixedTypeAnnotation;
  declare function emptyTypeAnnotation(): BabelNodeEmptyTypeAnnotation;
  declare function nullableTypeAnnotation(typeAnnotation: any): BabelNodeNullableTypeAnnotation;
  declare function numberLiteralTypeAnnotation(): BabelNodeNumberLiteralTypeAnnotation;
  declare function numberTypeAnnotation(): BabelNodeNumberTypeAnnotation;
  declare function stringLiteralTypeAnnotation(): BabelNodeStringLiteralTypeAnnotation;
  declare function stringTypeAnnotation(): BabelNodeStringTypeAnnotation;
  declare function thisTypeAnnotation(): BabelNodeThisTypeAnnotation;
  declare function tupleTypeAnnotation(types: any): BabelNodeTupleTypeAnnotation;
  declare function typeofTypeAnnotation(argument: any): BabelNodeTypeofTypeAnnotation;
  declare function typeAlias(id: any, typeParameters: any, right: any): BabelNodeTypeAlias;
  declare function opaqueType(id: any, typeParameters: any, supertype: any, impltype: any): BabelNodeOpaqueType;
  declare function typeCastExpression(expression: any, typeAnnotation: any): BabelNodeTypeCastExpression;
  declare function objectTypeAnnotation(properties: any, indexers: any, callProperties: any): BabelNodeObjectTypeAnnotation;
  declare function objectTypeCallProperty(value: any): BabelNodeObjectTypeCallProperty;
  declare function objectTypeIndexer(id: any, key: any, value: any): BabelNodeObjectTypeIndexer;
  declare function objectTypeProperty(key: any, value: any): BabelNodeObjectTypeProperty;
  declare function objectTypeSpreadProperty(argument: any): BabelNodeObjectTypeSpreadProperty;
  declare function qualifiedTypeIdentifier(id: any, qualification: any): BabelNodeQualifiedTypeIdentifier;
  declare function unionTypeAnnotation(types: any): BabelNodeUnionTypeAnnotation;
  declare function voidTypeAnnotation(): BabelNodeVoidTypeAnnotation;
  declare function jSXAttribute(name: BabelNodeJSXIdentifier | BabelNodeJSXNamespacedName, value?: ?BabelNodeJSXElement | BabelNodeStringLiteral | BabelNodeJSXExpressionContainer): BabelNodeJSXAttribute;
  declare function jSXClosingElement(name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression): BabelNodeJSXClosingElement;
  declare function jSXElement(openingElement: BabelNodeJSXOpeningElement, closingElement?: ?BabelNodeJSXClosingElement, children: any, selfClosing: any): BabelNodeJSXElement;
  declare function jSXEmptyExpression(): BabelNodeJSXEmptyExpression;
  declare function jSXExpressionContainer(expression: BabelNodeExpression): BabelNodeJSXExpressionContainer;
  declare function jSXSpreadChild(expression: BabelNodeExpression): BabelNodeJSXSpreadChild;
  declare function jSXIdentifier(name: string): BabelNodeJSXIdentifier;
  declare function jSXMemberExpression(object: BabelNodeJSXMemberExpression | BabelNodeJSXIdentifier, property: BabelNodeJSXIdentifier): BabelNodeJSXMemberExpression;
  declare function jSXNamespacedName(namespace: BabelNodeJSXIdentifier, name: BabelNodeJSXIdentifier): BabelNodeJSXNamespacedName;
  declare function jSXOpeningElement(name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression, attributes: any, selfClosing?: boolean): BabelNodeJSXOpeningElement;
  declare function jSXSpreadAttribute(argument: BabelNodeExpression): BabelNodeJSXSpreadAttribute;
  declare function jSXText(value: string): BabelNodeJSXText;
  declare function noop(): BabelNodeNoop;
  declare function parenthesizedExpression(expression: BabelNodeExpression): BabelNodeParenthesizedExpression;
  declare function awaitExpression(argument: BabelNodeExpression): BabelNodeAwaitExpression;
  declare function bindExpression(object: any, callee: any): BabelNodeBindExpression;
  declare function decorator(expression: BabelNodeExpression): BabelNodeDecorator;
  declare function doExpression(body: BabelNodeBlockStatement): BabelNodeDoExpression;
  declare function exportDefaultSpecifier(exported: BabelNodeIdentifier): BabelNodeExportDefaultSpecifier;
  declare function exportNamespaceSpecifier(exported: BabelNodeIdentifier): BabelNodeExportNamespaceSpecifier;
  declare function typeAnnotation(typeAnnotation: BabelNodeTSType | BabelNodeFlow): BabelNodeTypeAnnotation;
  declare function typeParameterInstantiation(params: any): BabelNodeTypeParameterInstantiation;
  declare function typeParameterDeclaration(params: any): BabelNodeTypeParameterDeclaration;
  declare function typeParameter(bound?: ?BabelNodeTypeAnnotation, constraint?: ?BabelNodeTSType, _default?: ?BabelNodeTSType | BabelNodeFlow, name?: string): BabelNodeTypeParameter;
  declare function classProperty(key: any, value?: ?BabelNodeExpression, typeAnnotation?: ?BabelNodeTypeAnnotation | BabelNodeNoop, decorators?: any, computed?: boolean, abstract?: boolean, accessibility?: any, optional?: boolean, readonly?: boolean, _static?: boolean): BabelNodeClassProperty;
  declare function tSParameterProperty(parameter: BabelNodeIdentifier | BabelNodeAssignmentPattern, accessibility?: "public" | "private" | "protected", readonly?: boolean): BabelNodeTSParameterProperty;
  declare function tSDeclareFunction(id?: ?BabelNodeIdentifier, typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop, params: any, returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop, async?: boolean, declare?: boolean, generator?: boolean): BabelNodeTSDeclareFunction;
  declare function tSDeclareMethod(decorators?: any, key: any, typeParameters?: ?BabelNodeTypeParameterDeclaration | BabelNodeNoop, params: any, returnType?: ?BabelNodeTypeAnnotation | BabelNodeNoop, abstract?: boolean, access?: any, accessibility?: any, async?: boolean, computed?: boolean, generator?: boolean, kind?: any, optional?: boolean, _static?: boolean): BabelNodeTSDeclareMethod;
  declare function tSQualifiedName(left: BabelNodeTSEntityName, right: BabelNodeIdentifier): BabelNodeTSQualifiedName;
  declare function tSCallSignatureDeclaration(typeParameters?: ?BabelNodeTypeParameterDeclaration, parameters?: any, typeAnnotation?: ?BabelNodeTypeAnnotation): BabelNodeTSCallSignatureDeclaration;
  declare function tSConstructSignatureDeclaration(typeParameters?: ?BabelNodeTypeParameterDeclaration, parameters?: any, typeAnnotation?: ?BabelNodeTypeAnnotation): BabelNodeTSConstructSignatureDeclaration;
  declare function tSPropertySignature(key: BabelNodeExpression, typeAnnotation?: ?BabelNodeTypeAnnotation, initializer?: ?BabelNodeExpression, computed?: boolean, optional?: boolean, readonly?: boolean): BabelNodeTSPropertySignature;
  declare function tSMethodSignature(key: BabelNodeExpression, typeParameters?: ?BabelNodeTypeParameterDeclaration, parameters?: any, typeAnnotation?: ?BabelNodeTypeAnnotation, computed?: boolean, optional?: boolean): BabelNodeTSMethodSignature;
  declare function tSIndexSignature(parameters: any, typeAnnotation?: ?BabelNodeTypeAnnotation, readonly?: boolean): BabelNodeTSIndexSignature;
  declare function tSAnyKeyword(): BabelNodeTSAnyKeyword;
  declare function tSNumberKeyword(): BabelNodeTSNumberKeyword;
  declare function tSObjectKeyword(): BabelNodeTSObjectKeyword;
  declare function tSBooleanKeyword(): BabelNodeTSBooleanKeyword;
  declare function tSStringKeyword(): BabelNodeTSStringKeyword;
  declare function tSSymbolKeyword(): BabelNodeTSSymbolKeyword;
  declare function tSVoidKeyword(): BabelNodeTSVoidKeyword;
  declare function tSUndefinedKeyword(): BabelNodeTSUndefinedKeyword;
  declare function tSNullKeyword(): BabelNodeTSNullKeyword;
  declare function tSNeverKeyword(): BabelNodeTSNeverKeyword;
  declare function tSThisType(): BabelNodeTSThisType;
  declare function tSFunctionType(typeParameters?: ?BabelNodeTypeParameterDeclaration, typeAnnotation?: ?BabelNodeTypeAnnotation, parameters?: any): BabelNodeTSFunctionType;
  declare function tSConstructorType(typeParameters?: ?BabelNodeTypeParameterDeclaration, typeAnnotation?: ?BabelNodeTypeAnnotation, parameters?: any): BabelNodeTSConstructorType;
  declare function tSTypeReference(typeName: BabelNodeTSEntityName, typeParameters?: ?BabelNodeTypeParameterInstantiation): BabelNodeTSTypeReference;
  declare function tSTypePredicate(parameterName: BabelNodeIdentifier | BabelNodeTSThisType, typeAnnotation: BabelNodeTypeAnnotation): BabelNodeTSTypePredicate;
  declare function tSTypeQuery(exprName: BabelNodeTSEntityName): BabelNodeTSTypeQuery;
  declare function tSTypeLiteral(members: any): BabelNodeTSTypeLiteral;
  declare function tSArrayType(elementType: BabelNodeTSType): BabelNodeTSArrayType;
  declare function tSTupleType(elementTypes: any): BabelNodeTSTupleType;
  declare function tSUnionType(types: any): BabelNodeTSUnionType;
  declare function tSIntersectionType(types: any): BabelNodeTSIntersectionType;
  declare function tSParenthesizedType(typeAnnotation: BabelNodeTSType): BabelNodeTSParenthesizedType;
  declare function tSTypeOperator(typeAnnotation: BabelNodeTSType, operator?: string): BabelNodeTSTypeOperator;
  declare function tSIndexedAccessType(objectType: BabelNodeTSType, indexType: BabelNodeTSType): BabelNodeTSIndexedAccessType;
  declare function tSMappedType(typeParameter: BabelNodeTypeParameter, typeAnnotation?: ?BabelNodeTSType, optional?: boolean, readonly?: boolean): BabelNodeTSMappedType;
  declare function tSLiteralType(literal: BabelNodeNumericLiteral | BabelNodeStringLiteral | BabelNodeBooleanLiteral): BabelNodeTSLiteralType;
  declare function tSExpressionWithTypeArguments(expression: BabelNodeTSEntityName, typeParameters?: ?BabelNodeTypeParameterInstantiation): BabelNodeTSExpressionWithTypeArguments;
  declare function tSInterfaceDeclaration(id: BabelNodeIdentifier, typeParameters?: ?BabelNodeTypeParameterDeclaration, _extends?: any, body: BabelNodeTSInterfaceBody, declare?: boolean): BabelNodeTSInterfaceDeclaration;
  declare function tSInterfaceBody(body: any): BabelNodeTSInterfaceBody;
  declare function tSTypeAliasDeclaration(id: BabelNodeIdentifier, typeParameters?: ?BabelNodeTypeParameterDeclaration, typeAnnotation: BabelNodeTSType, declare?: boolean): BabelNodeTSTypeAliasDeclaration;
  declare function tSAsExpression(expression: BabelNodeExpression, typeAnnotation: BabelNodeTSType): BabelNodeTSAsExpression;
  declare function tSTypeAssertion(typeAnnotation: BabelNodeTSType, expression: BabelNodeExpression): BabelNodeTSTypeAssertion;
  declare function tSEnumDeclaration(id: BabelNodeIdentifier, members: any, _const?: boolean, declare?: boolean, initializer?: ?BabelNodeExpression): BabelNodeTSEnumDeclaration;
  declare function tSEnumMember(id: BabelNodeIdentifier | BabelNodeStringLiteral, initializer?: ?BabelNodeExpression): BabelNodeTSEnumMember;
  declare function tSModuleDeclaration(id: BabelNodeIdentifier | BabelNodeStringLiteral, body: BabelNodeTSModuleBlock | BabelNodeTSModuleDeclaration, declare?: boolean, global?: boolean): BabelNodeTSModuleDeclaration;
  declare function tSModuleBlock(body: any): BabelNodeTSModuleBlock;
  declare function tSImportEqualsDeclaration(id: BabelNodeIdentifier, moduleReference: BabelNodeTSEntityName | BabelNodeTSExternalModuleReference, isExport?: boolean): BabelNodeTSImportEqualsDeclaration;
  declare function tSExternalModuleReference(expression: BabelNodeStringLiteral): BabelNodeTSExternalModuleReference;
  declare function tSNonNullExpression(expression: BabelNodeExpression): BabelNodeTSNonNullExpression;
  declare function tSExportAssignment(expression: BabelNodeExpression): BabelNodeTSExportAssignment;
  declare function tSNamespaceExportDeclaration(id: BabelNodeIdentifier): BabelNodeTSNamespaceExportDeclaration;
  declare function isArrayExpression(node: Object, opts?: Object): boolean;
  declare function isAssignmentExpression(node: Object, opts?: Object): boolean;
  declare function isBinaryExpression(node: Object, opts?: Object): boolean;
  declare function isDirective(node: Object, opts?: Object): boolean;
  declare function isDirectiveLiteral(node: Object, opts?: Object): boolean;
  declare function isBlockStatement(node: Object, opts?: Object): boolean;
  declare function isBreakStatement(node: Object, opts?: Object): boolean;
  declare function isCallExpression(node: Object, opts?: Object): boolean;
  declare function isCatchClause(node: Object, opts?: Object): boolean;
  declare function isConditionalExpression(node: Object, opts?: Object): boolean;
  declare function isContinueStatement(node: Object, opts?: Object): boolean;
  declare function isDebuggerStatement(node: Object, opts?: Object): boolean;
  declare function isDoWhileStatement(node: Object, opts?: Object): boolean;
  declare function isEmptyStatement(node: Object, opts?: Object): boolean;
  declare function isExpressionStatement(node: Object, opts?: Object): boolean;
  declare function isFile(node: Object, opts?: Object): boolean;
  declare function isForInStatement(node: Object, opts?: Object): boolean;
  declare function isForStatement(node: Object, opts?: Object): boolean;
  declare function isFunctionDeclaration(node: Object, opts?: Object): boolean;
  declare function isFunctionExpression(node: Object, opts?: Object): boolean;
  declare function isIdentifier(node: Object, opts?: Object): boolean;
  declare function isIfStatement(node: Object, opts?: Object): boolean;
  declare function isLabeledStatement(node: Object, opts?: Object): boolean;
  declare function isStringLiteral(node: Object, opts?: Object): boolean;
  declare function isNumericLiteral(node: Object, opts?: Object): boolean;
  declare function isNullLiteral(node: Object, opts?: Object): boolean;
  declare function isBooleanLiteral(node: Object, opts?: Object): boolean;
  declare function isRegExpLiteral(node: Object, opts?: Object): boolean;
  declare function isLogicalExpression(node: Object, opts?: Object): boolean;
  declare function isMemberExpression(node: Object, opts?: Object): boolean;
  declare function isNewExpression(node: Object, opts?: Object): boolean;
  declare function isProgram(node: Object, opts?: Object): boolean;
  declare function isObjectExpression(node: Object, opts?: Object): boolean;
  declare function isObjectMethod(node: Object, opts?: Object): boolean;
  declare function isObjectProperty(node: Object, opts?: Object): boolean;
  declare function isRestElement(node: Object, opts?: Object): boolean;
  declare function isReturnStatement(node: Object, opts?: Object): boolean;
  declare function isSequenceExpression(node: Object, opts?: Object): boolean;
  declare function isSwitchCase(node: Object, opts?: Object): boolean;
  declare function isSwitchStatement(node: Object, opts?: Object): boolean;
  declare function isThisExpression(node: Object, opts?: Object): boolean;
  declare function isThrowStatement(node: Object, opts?: Object): boolean;
  declare function isTryStatement(node: Object, opts?: Object): boolean;
  declare function isUnaryExpression(node: Object, opts?: Object): boolean;
  declare function isUpdateExpression(node: Object, opts?: Object): boolean;
  declare function isVariableDeclaration(node: Object, opts?: Object): boolean;
  declare function isVariableDeclarator(node: Object, opts?: Object): boolean;
  declare function isWhileStatement(node: Object, opts?: Object): boolean;
  declare function isWithStatement(node: Object, opts?: Object): boolean;
  declare function isAssignmentPattern(node: Object, opts?: Object): boolean;
  declare function isArrayPattern(node: Object, opts?: Object): boolean;
  declare function isArrowFunctionExpression(node: Object, opts?: Object): boolean;
  declare function isClassBody(node: Object, opts?: Object): boolean;
  declare function isClassDeclaration(node: Object, opts?: Object): boolean;
  declare function isClassExpression(node: Object, opts?: Object): boolean;
  declare function isExportAllDeclaration(node: Object, opts?: Object): boolean;
  declare function isExportDefaultDeclaration(node: Object, opts?: Object): boolean;
  declare function isExportNamedDeclaration(node: Object, opts?: Object): boolean;
  declare function isExportSpecifier(node: Object, opts?: Object): boolean;
  declare function isForOfStatement(node: Object, opts?: Object): boolean;
  declare function isImportDeclaration(node: Object, opts?: Object): boolean;
  declare function isImportDefaultSpecifier(node: Object, opts?: Object): boolean;
  declare function isImportNamespaceSpecifier(node: Object, opts?: Object): boolean;
  declare function isImportSpecifier(node: Object, opts?: Object): boolean;
  declare function isMetaProperty(node: Object, opts?: Object): boolean;
  declare function isClassMethod(node: Object, opts?: Object): boolean;
  declare function isObjectPattern(node: Object, opts?: Object): boolean;
  declare function isSpreadElement(node: Object, opts?: Object): boolean;
  declare function isSuper(node: Object, opts?: Object): boolean;
  declare function isTaggedTemplateExpression(node: Object, opts?: Object): boolean;
  declare function isTemplateElement(node: Object, opts?: Object): boolean;
  declare function isTemplateLiteral(node: Object, opts?: Object): boolean;
  declare function isYieldExpression(node: Object, opts?: Object): boolean;
  declare function isAnyTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isArrayTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isBooleanTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isBooleanLiteralTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isNullLiteralTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isClassImplements(node: Object, opts?: Object): boolean;
  declare function isDeclareClass(node: Object, opts?: Object): boolean;
  declare function isDeclareFunction(node: Object, opts?: Object): boolean;
  declare function isDeclareInterface(node: Object, opts?: Object): boolean;
  declare function isDeclareModule(node: Object, opts?: Object): boolean;
  declare function isDeclareModuleExports(node: Object, opts?: Object): boolean;
  declare function isDeclareTypeAlias(node: Object, opts?: Object): boolean;
  declare function isDeclareOpaqueType(node: Object, opts?: Object): boolean;
  declare function isDeclareVariable(node: Object, opts?: Object): boolean;
  declare function isDeclareExportDeclaration(node: Object, opts?: Object): boolean;
  declare function isDeclareExportAllDeclaration(node: Object, opts?: Object): boolean;
  declare function isDeclaredPredicate(node: Object, opts?: Object): boolean;
  declare function isExistsTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isFunctionTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isFunctionTypeParam(node: Object, opts?: Object): boolean;
  declare function isGenericTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isInferredPredicate(node: Object, opts?: Object): boolean;
  declare function isInterfaceExtends(node: Object, opts?: Object): boolean;
  declare function isInterfaceDeclaration(node: Object, opts?: Object): boolean;
  declare function isIntersectionTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isMixedTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isEmptyTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isNullableTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isNumberLiteralTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isNumberTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isStringLiteralTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isStringTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isThisTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isTupleTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isTypeofTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isTypeAlias(node: Object, opts?: Object): boolean;
  declare function isOpaqueType(node: Object, opts?: Object): boolean;
  declare function isTypeCastExpression(node: Object, opts?: Object): boolean;
  declare function isObjectTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isObjectTypeCallProperty(node: Object, opts?: Object): boolean;
  declare function isObjectTypeIndexer(node: Object, opts?: Object): boolean;
  declare function isObjectTypeProperty(node: Object, opts?: Object): boolean;
  declare function isObjectTypeSpreadProperty(node: Object, opts?: Object): boolean;
  declare function isQualifiedTypeIdentifier(node: Object, opts?: Object): boolean;
  declare function isUnionTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isVoidTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isJSXAttribute(node: Object, opts?: Object): boolean;
  declare function isJSXClosingElement(node: Object, opts?: Object): boolean;
  declare function isJSXElement(node: Object, opts?: Object): boolean;
  declare function isJSXEmptyExpression(node: Object, opts?: Object): boolean;
  declare function isJSXExpressionContainer(node: Object, opts?: Object): boolean;
  declare function isJSXSpreadChild(node: Object, opts?: Object): boolean;
  declare function isJSXIdentifier(node: Object, opts?: Object): boolean;
  declare function isJSXMemberExpression(node: Object, opts?: Object): boolean;
  declare function isJSXNamespacedName(node: Object, opts?: Object): boolean;
  declare function isJSXOpeningElement(node: Object, opts?: Object): boolean;
  declare function isJSXSpreadAttribute(node: Object, opts?: Object): boolean;
  declare function isJSXText(node: Object, opts?: Object): boolean;
  declare function isNoop(node: Object, opts?: Object): boolean;
  declare function isParenthesizedExpression(node: Object, opts?: Object): boolean;
  declare function isAwaitExpression(node: Object, opts?: Object): boolean;
  declare function isBindExpression(node: Object, opts?: Object): boolean;
  declare function isImport(node: Object, opts?: Object): boolean;
  declare function isDecorator(node: Object, opts?: Object): boolean;
  declare function isDoExpression(node: Object, opts?: Object): boolean;
  declare function isExportDefaultSpecifier(node: Object, opts?: Object): boolean;
  declare function isExportNamespaceSpecifier(node: Object, opts?: Object): boolean;
  declare function isTypeAnnotation(node: Object, opts?: Object): boolean;
  declare function isTypeParameterInstantiation(node: Object, opts?: Object): boolean;
  declare function isTypeParameterDeclaration(node: Object, opts?: Object): boolean;
  declare function isTypeParameter(node: Object, opts?: Object): boolean;
  declare function isClassProperty(node: Object, opts?: Object): boolean;
  declare function isTSParameterProperty(node: Object, opts?: Object): boolean;
  declare function isTSDeclareFunction(node: Object, opts?: Object): boolean;
  declare function isTSDeclareMethod(node: Object, opts?: Object): boolean;
  declare function isTSQualifiedName(node: Object, opts?: Object): boolean;
  declare function isTSCallSignatureDeclaration(node: Object, opts?: Object): boolean;
  declare function isTSConstructSignatureDeclaration(node: Object, opts?: Object): boolean;
  declare function isTSPropertySignature(node: Object, opts?: Object): boolean;
  declare function isTSMethodSignature(node: Object, opts?: Object): boolean;
  declare function isTSIndexSignature(node: Object, opts?: Object): boolean;
  declare function isTSAnyKeyword(node: Object, opts?: Object): boolean;
  declare function isTSNumberKeyword(node: Object, opts?: Object): boolean;
  declare function isTSObjectKeyword(node: Object, opts?: Object): boolean;
  declare function isTSBooleanKeyword(node: Object, opts?: Object): boolean;
  declare function isTSStringKeyword(node: Object, opts?: Object): boolean;
  declare function isTSSymbolKeyword(node: Object, opts?: Object): boolean;
  declare function isTSVoidKeyword(node: Object, opts?: Object): boolean;
  declare function isTSUndefinedKeyword(node: Object, opts?: Object): boolean;
  declare function isTSNullKeyword(node: Object, opts?: Object): boolean;
  declare function isTSNeverKeyword(node: Object, opts?: Object): boolean;
  declare function isTSThisType(node: Object, opts?: Object): boolean;
  declare function isTSFunctionType(node: Object, opts?: Object): boolean;
  declare function isTSConstructorType(node: Object, opts?: Object): boolean;
  declare function isTSTypeReference(node: Object, opts?: Object): boolean;
  declare function isTSTypePredicate(node: Object, opts?: Object): boolean;
  declare function isTSTypeQuery(node: Object, opts?: Object): boolean;
  declare function isTSTypeLiteral(node: Object, opts?: Object): boolean;
  declare function isTSArrayType(node: Object, opts?: Object): boolean;
  declare function isTSTupleType(node: Object, opts?: Object): boolean;
  declare function isTSUnionType(node: Object, opts?: Object): boolean;
  declare function isTSIntersectionType(node: Object, opts?: Object): boolean;
  declare function isTSParenthesizedType(node: Object, opts?: Object): boolean;
  declare function isTSTypeOperator(node: Object, opts?: Object): boolean;
  declare function isTSIndexedAccessType(node: Object, opts?: Object): boolean;
  declare function isTSMappedType(node: Object, opts?: Object): boolean;
  declare function isTSLiteralType(node: Object, opts?: Object): boolean;
  declare function isTSExpressionWithTypeArguments(node: Object, opts?: Object): boolean;
  declare function isTSInterfaceDeclaration(node: Object, opts?: Object): boolean;
  declare function isTSInterfaceBody(node: Object, opts?: Object): boolean;
  declare function isTSTypeAliasDeclaration(node: Object, opts?: Object): boolean;
  declare function isTSAsExpression(node: Object, opts?: Object): boolean;
  declare function isTSTypeAssertion(node: Object, opts?: Object): boolean;
  declare function isTSEnumDeclaration(node: Object, opts?: Object): boolean;
  declare function isTSEnumMember(node: Object, opts?: Object): boolean;
  declare function isTSModuleDeclaration(node: Object, opts?: Object): boolean;
  declare function isTSModuleBlock(node: Object, opts?: Object): boolean;
  declare function isTSImportEqualsDeclaration(node: Object, opts?: Object): boolean;
  declare function isTSExternalModuleReference(node: Object, opts?: Object): boolean;
  declare function isTSNonNullExpression(node: Object, opts?: Object): boolean;
  declare function isTSExportAssignment(node: Object, opts?: Object): boolean;
  declare function isTSNamespaceExportDeclaration(node: Object, opts?: Object): boolean;
  declare function isExpression(node: Object, opts?: Object): boolean;
  declare function isBinary(node: Object, opts?: Object): boolean;
  declare function isScopable(node: Object, opts?: Object): boolean;
  declare function isBlockParent(node: Object, opts?: Object): boolean;
  declare function isBlock(node: Object, opts?: Object): boolean;
  declare function isStatement(node: Object, opts?: Object): boolean;
  declare function isTerminatorless(node: Object, opts?: Object): boolean;
  declare function isCompletionStatement(node: Object, opts?: Object): boolean;
  declare function isConditional(node: Object, opts?: Object): boolean;
  declare function isLoop(node: Object, opts?: Object): boolean;
  declare function isWhile(node: Object, opts?: Object): boolean;
  declare function isExpressionWrapper(node: Object, opts?: Object): boolean;
  declare function isFor(node: Object, opts?: Object): boolean;
  declare function isForXStatement(node: Object, opts?: Object): boolean;
  declare function isFunction(node: Object, opts?: Object): boolean;
  declare function isFunctionParent(node: Object, opts?: Object): boolean;
  declare function isPureish(node: Object, opts?: Object): boolean;
  declare function isDeclaration(node: Object, opts?: Object): boolean;
  declare function isPatternLike(node: Object, opts?: Object): boolean;
  declare function isLVal(node: Object, opts?: Object): boolean;
  declare function isTSEntityName(node: Object, opts?: Object): boolean;
  declare function isLiteral(node: Object, opts?: Object): boolean;
  declare function isImmutable(node: Object, opts?: Object): boolean;
  declare function isUserWhitespacable(node: Object, opts?: Object): boolean;
  declare function isMethod(node: Object, opts?: Object): boolean;
  declare function isObjectMember(node: Object, opts?: Object): boolean;
  declare function isProperty(node: Object, opts?: Object): boolean;
  declare function isUnaryLike(node: Object, opts?: Object): boolean;
  declare function isPattern(node: Object, opts?: Object): boolean;
  declare function isClass(node: Object, opts?: Object): boolean;
  declare function isModuleDeclaration(node: Object, opts?: Object): boolean;
  declare function isExportDeclaration(node: Object, opts?: Object): boolean;
  declare function isModuleSpecifier(node: Object, opts?: Object): boolean;
  declare function isFlow(node: Object, opts?: Object): boolean;
  declare function isFlowBaseAnnotation(node: Object, opts?: Object): boolean;
  declare function isFlowDeclaration(node: Object, opts?: Object): boolean;
  declare function isFlowPredicate(node: Object, opts?: Object): boolean;
  declare function isJSX(node: Object, opts?: Object): boolean;
  declare function isTSTypeElement(node: Object, opts?: Object): boolean;
  declare function isTSType(node: Object, opts?: Object): boolean;
  declare function isNumberLiteral(node: Object, opts?: Object): boolean;
  declare function isRegexLiteral(node: Object, opts?: Object): boolean;
}
