Flow opaque type aliases (#5990)

This commit is contained in:
jbrown215 2017-08-02 17:30:19 -04:00 committed by Brian Ng
parent 0f823beeb1
commit 4e9a25e34a
14 changed files with 193 additions and 6 deletions

View File

@ -592,6 +592,13 @@ declare class BabelNodeDeclareTypeAlias extends BabelNode {
right: any; right: any;
} }
declare class BabelNodeDeclareOpaqueType extends BabelNode {
type: "DeclareOpaqueType";
id: any;
typeParameters: any;
supertype: any;
}
declare class BabelNodeDeclareVariable extends BabelNode { declare class BabelNodeDeclareVariable extends BabelNode {
type: "DeclareVariable"; type: "DeclareVariable";
id: any; id: any;
@ -710,6 +717,14 @@ declare class BabelNodeTypeAlias extends BabelNode {
right: any; right: any;
} }
declare class BabelNodeOpaqueType extends BabelNode {
type: "OpaqueType";
id: any;
typeParameters: any;
supertype: any;
impltype: any;
}
declare class BabelNodeTypeCastExpression extends BabelNode { declare class BabelNodeTypeCastExpression extends BabelNode {
type: "TypeCastExpression"; type: "TypeCastExpression";
expression: any; expression: any;
@ -1217,7 +1232,7 @@ type BabelNodeBinary = BabelNodeBinaryExpression | BabelNodeLogicalExpression;
type BabelNodeScopable = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression | BabelNodeForOfStatement | BabelNodeClassMethod; 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 BabelNodeBlockParent = BabelNodeBlockStatement | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeForOfStatement | BabelNodeClassMethod;
type BabelNodeBlock = BabelNodeBlockStatement | BabelNodeProgram; 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 | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeTSDeclareFunction | BabelNodeTSInterfaceDeclaration | BabelNodeTSTypeAliasDeclaration | BabelNodeTSEnumDeclaration | BabelNodeTSModuleDeclaration | BabelNodeTSImportEqualsDeclaration | BabelNodeTSExportAssignment | BabelNodeTSNamespaceExportDeclaration; 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 BabelNodeTerminatorless = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement | BabelNodeYieldExpression | BabelNodeAwaitExpression;
type BabelNodeCompletionStatement = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement; type BabelNodeCompletionStatement = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement;
type BabelNodeConditional = BabelNodeConditionalExpression | BabelNodeIfStatement; type BabelNodeConditional = BabelNodeConditionalExpression | BabelNodeIfStatement;
@ -1229,7 +1244,7 @@ type BabelNodeForXStatement = BabelNodeForInStatement | BabelNodeForOfStatement;
type BabelNodeFunction = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod; type BabelNodeFunction = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod;
type BabelNodeFunctionParent = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod; type BabelNodeFunctionParent = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod;
type BabelNodePureish = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression; 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 | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeTSDeclareFunction | BabelNodeTSInterfaceDeclaration | BabelNodeTSTypeAliasDeclaration | BabelNodeTSEnumDeclaration | BabelNodeTSModuleDeclaration; 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 BabelNodePatternLike = BabelNodeIdentifier | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern;
type BabelNodeLVal = BabelNodeIdentifier | BabelNodeMemberExpression | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern | BabelNodeTSParameterProperty; type BabelNodeLVal = BabelNodeIdentifier | BabelNodeMemberExpression | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern | BabelNodeTSParameterProperty;
type BabelNodeTSEntityName = BabelNodeIdentifier | BabelNodeTSQualifiedName; type BabelNodeTSEntityName = BabelNodeIdentifier | BabelNodeTSQualifiedName;
@ -1245,9 +1260,9 @@ type BabelNodeClass = BabelNodeClassDeclaration | BabelNodeClassExpression;
type BabelNodeModuleDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration; type BabelNodeModuleDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration;
type BabelNodeExportDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration; type BabelNodeExportDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration;
type BabelNodeModuleSpecifier = BabelNodeExportSpecifier | BabelNodeImportDefaultSpecifier | BabelNodeImportNamespaceSpecifier | BabelNodeImportSpecifier | BabelNodeExportDefaultSpecifier | BabelNodeExportNamespaceSpecifier; type BabelNodeModuleSpecifier = BabelNodeExportSpecifier | BabelNodeImportDefaultSpecifier | BabelNodeImportNamespaceSpecifier | BabelNodeImportSpecifier | BabelNodeExportDefaultSpecifier | BabelNodeExportNamespaceSpecifier;
type BabelNodeFlow = BabelNodeAnyTypeAnnotation | BabelNodeArrayTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeBooleanLiteralTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeClassImplements | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeDeclaredPredicate | BabelNodeExistsTypeAnnotation | BabelNodeFunctionTypeAnnotation | BabelNodeFunctionTypeParam | BabelNodeGenericTypeAnnotation | BabelNodeInferredPredicate | BabelNodeInterfaceExtends | BabelNodeInterfaceDeclaration | BabelNodeIntersectionTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNullableTypeAnnotation | BabelNodeNumberLiteralTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringLiteralTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeTupleTypeAnnotation | BabelNodeTypeofTypeAnnotation | BabelNodeTypeAlias | BabelNodeTypeCastExpression | BabelNodeObjectTypeAnnotation | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty | BabelNodeQualifiedTypeIdentifier | BabelNodeUnionTypeAnnotation | BabelNodeVoidTypeAnnotation | BabelNodeTypeAnnotation | BabelNodeTypeParameterInstantiation | BabelNodeTypeParameterDeclaration | BabelNodeTypeParameter; 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 BabelNodeFlowBaseAnnotation = BabelNodeAnyTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeVoidTypeAnnotation;
type BabelNodeFlowDeclaration = BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias; type BabelNodeFlowDeclaration = BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeDeclareExportAllDeclaration | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType;
type BabelNodeFlowPredicate = BabelNodeDeclaredPredicate | BabelNodeInferredPredicate; type BabelNodeFlowPredicate = BabelNodeDeclaredPredicate | BabelNodeInferredPredicate;
type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText; type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText;
type BabelNodeTSTypeElement = BabelNodeTSCallSignatureDeclaration | BabelNodeTSConstructSignatureDeclaration | BabelNodeTSPropertySignature | BabelNodeTSMethodSignature | BabelNodeTSIndexSignature; type BabelNodeTSTypeElement = BabelNodeTSCallSignatureDeclaration | BabelNodeTSConstructSignatureDeclaration | BabelNodeTSPropertySignature | BabelNodeTSMethodSignature | BabelNodeTSIndexSignature;
@ -1338,6 +1353,7 @@ declare module "babel-types" {
declare function declareModule(id: any, body: any): BabelNodeDeclareModule; declare function declareModule(id: any, body: any): BabelNodeDeclareModule;
declare function declareModuleExports(typeAnnotation: any): BabelNodeDeclareModuleExports; declare function declareModuleExports(typeAnnotation: any): BabelNodeDeclareModuleExports;
declare function declareTypeAlias(id: any, typeParameters: any, right: any): BabelNodeDeclareTypeAlias; 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 declareVariable(id: any): BabelNodeDeclareVariable;
declare function declareExportDeclaration(declaration: any, specifiers: any, source: any): BabelNodeDeclareExportDeclaration; declare function declareExportDeclaration(declaration: any, specifiers: any, source: any): BabelNodeDeclareExportDeclaration;
declare function declareExportAllDeclaration(source: any): BabelNodeDeclareExportAllDeclaration; declare function declareExportAllDeclaration(source: any): BabelNodeDeclareExportAllDeclaration;
@ -1361,6 +1377,7 @@ declare module "babel-types" {
declare function tupleTypeAnnotation(types: any): BabelNodeTupleTypeAnnotation; declare function tupleTypeAnnotation(types: any): BabelNodeTupleTypeAnnotation;
declare function typeofTypeAnnotation(argument: any): BabelNodeTypeofTypeAnnotation; declare function typeofTypeAnnotation(argument: any): BabelNodeTypeofTypeAnnotation;
declare function typeAlias(id: any, typeParameters: any, right: any): BabelNodeTypeAlias; 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 typeCastExpression(expression: any, typeAnnotation: any): BabelNodeTypeCastExpression;
declare function objectTypeAnnotation(properties: any, indexers: any, callProperties: any): BabelNodeObjectTypeAnnotation; declare function objectTypeAnnotation(properties: any, indexers: any, callProperties: any): BabelNodeObjectTypeAnnotation;
declare function objectTypeCallProperty(value: any): BabelNodeObjectTypeCallProperty; declare function objectTypeCallProperty(value: any): BabelNodeObjectTypeCallProperty;
@ -1530,6 +1547,7 @@ declare module "babel-types" {
declare function isDeclareModule(node: Object, opts?: Object): boolean; declare function isDeclareModule(node: Object, opts?: Object): boolean;
declare function isDeclareModuleExports(node: Object, opts?: Object): boolean; declare function isDeclareModuleExports(node: Object, opts?: Object): boolean;
declare function isDeclareTypeAlias(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 isDeclareVariable(node: Object, opts?: Object): boolean;
declare function isDeclareExportDeclaration(node: Object, opts?: Object): boolean; declare function isDeclareExportDeclaration(node: Object, opts?: Object): boolean;
declare function isDeclareExportAllDeclaration(node: Object, opts?: Object): boolean; declare function isDeclareExportAllDeclaration(node: Object, opts?: Object): boolean;
@ -1553,6 +1571,7 @@ declare module "babel-types" {
declare function isTupleTypeAnnotation(node: Object, opts?: Object): boolean; declare function isTupleTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isTypeofTypeAnnotation(node: Object, opts?: Object): boolean; declare function isTypeofTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isTypeAlias(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 isTypeCastExpression(node: Object, opts?: Object): boolean;
declare function isObjectTypeAnnotation(node: Object, opts?: Object): boolean; declare function isObjectTypeAnnotation(node: Object, opts?: Object): boolean;
declare function isObjectTypeCallProperty(node: Object, opts?: Object): boolean; declare function isObjectTypeCallProperty(node: Object, opts?: Object): boolean;

View File

@ -95,6 +95,14 @@ export function DeclareTypeAlias(node: Object) {
this.TypeAlias(node); this.TypeAlias(node);
} }
export function DeclareOpaqueType(node: Object, parent: Object) {
if (!t.isDeclareExportDeclaration(parent)) {
this.word("declare");
this.space();
}
this.OpaqueType(node);
}
export function DeclareVariable(node: Object, parent: Object) { export function DeclareVariable(node: Object, parent: Object) {
if (!t.isDeclareExportDeclaration(parent)) { if (!t.isDeclareExportDeclaration(parent)) {
this.word("declare"); this.word("declare");
@ -303,6 +311,27 @@ export function TypeAlias(node: Object) {
this.semicolon(); this.semicolon();
} }
export function OpaqueType(node: Object) {
this.word("opaque");
this.space();
this.word("type");
this.space();
this.print(node.id, node);
this.print(node.typeParameters, node);
if (node.supertype) {
this.token(":");
this.space();
this.print(node.supertype, node);
}
if (node.impltype) {
this.space();
this.token("=");
this.space();
this.print(node.impltype, node);
}
this.semicolon();
}
export function ObjectTypeAnnotation(node: Object) { export function ObjectTypeAnnotation(node: Object) {
if (node.exact) { if (node.exact) {
this.token("{|"); this.token("{|");

View File

@ -24,3 +24,9 @@ declare module B {
} }
declare module "foo" { declare export type * from "bar"; } declare module "foo" { declare export type * from "bar"; }
declare export opaque type Foo;
declare export opaque type Bar<T>;
declare export opaque type Baz: Foo;
declare export opaque type Foo<T>: Bar<T>;
declare export opaque type Foo<T>: Bar;
declare export opaque type Foo: Bar<T>;

View File

@ -32,4 +32,10 @@ declare module B {
} }
declare module "foo" { declare module "foo" {
declare export type * from "bar"; declare export type * from "bar";
} }
declare export opaque type Foo;
declare export opaque type Bar<T>;
declare export opaque type Baz: Foo;
declare export opaque type Foo<T>: Bar<T>;
declare export opaque type Foo<T>: Bar;
declare export opaque type Foo: Bar<T>;

View File

@ -19,3 +19,7 @@ declare type B = {
declare interface I { foo: string } declare interface I { foo: string }
declare interface I<T> { foo: T } declare interface I<T> { foo: T }
declare module.exports: { foo: string } declare module.exports: { foo: string }
declare opaque type Foo<T>: Bar<T>;
declare opaque type ID;
declare opaque type num: number;
declare opaque type NumArray;

View File

@ -37,4 +37,8 @@ declare interface I<T> {
} }
declare module.exports: { declare module.exports: {
foo: string foo: string
} }
declare opaque type Foo<T>: Bar<T>;
declare opaque type ID;
declare opaque type num: number;
declare opaque type NumArray;

View File

@ -0,0 +1,14 @@
opaque type ID = string;
opaque type Foo<T> = Bar<T>;
opaque type Maybe<T> = _Maybe<T, *>;
export opaque type Foo = number;
opaque type union =
| {type: "A"}
| {type: "B"}
;
opaque type overloads =
& ((x: string) => number)
& ((x: number) => string)
;

View File

@ -0,0 +1,10 @@
opaque type ID = string;
opaque type Foo<T> = Bar<T>;
opaque type Maybe<T> = _Maybe<T, *>;
export opaque type Foo = number;
opaque type union = {
type: "A"
} | {
type: "B"
};
opaque type overloads = (x: string) => number & (x: number) => string;

View File

@ -0,0 +1,15 @@
function a() {}
opaque type A = number;
opaque type B = {
name: string;
};
opaque type union =
| {type: "A"}
| {type: "B"}
;
opaque type overloads =
& ((x: string) => number)
& ((x: number) => string)
;

View File

@ -0,0 +1,16 @@
function a() {}
/*:: opaque type A = number;*/
/*:: opaque type B = {
name: string;
};*/
/*:: opaque type union =
| {type: "A"}
| {type: "B"}
;*/
/*:: opaque type overloads =
& ((x: string) => number)
& ((x: number) => string)
;*/

View File

@ -0,0 +1,16 @@
opaque type ID = string;
opaque type Foo<T> = Bar<T>
export opaque type Foo = number;
opaque type union =
| {type: "A"}
| {type: "B"}
;
opaque type overloads =
& ((x: string) => number)
& ((x: number) => string)
;
declare opaque type Foo: Bar;
declare export opaque type Foo: Bar;

View File

@ -507,6 +507,21 @@ Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration`
--- ---
### declareOpaqueType
```javascript
t.declareOpaqueType(id, typeParameters, supertype)
```
See also `t.isDeclareOpaqueType(node, opts)` and `t.assertDeclareOpaqueType(node, opts)`.
Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration`
- `id` (required)
- `typeParameters` (required)
- `supertype` (required)
---
### declareTypeAlias ### declareTypeAlias
```javascript ```javascript
t.declareTypeAlias(id, typeParameters, right) t.declareTypeAlias(id, typeParameters, right)
@ -1505,6 +1520,22 @@ Aliases: `Flow`, `UserWhitespacable`
--- ---
### opaqueType
```javascript
t.opaqueType(id, typeParameters, supertype, impltype)
```
See also `t.isOpaqueType(node, opts)` and `t.assertOpaqueType(node, opts)`.
Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration`
- `id` (required)
- `typeParameters` (required)
- `supertype` (required)
- `impltype` (required)
---
### parenthesizedExpression ### parenthesizedExpression
```javascript ```javascript
t.parenthesizedExpression(expression) t.parenthesizedExpression(expression)

View File

@ -88,6 +88,14 @@ defineType("DeclareTypeAlias", {
}, },
}); });
defineType("DeclareOpaqueType", {
visitor: ["id", "typeParameters", "supertype"],
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
fields: {
// todo
},
});
defineType("DeclareVariable", { defineType("DeclareVariable", {
visitor: ["id"], visitor: ["id"],
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
@ -252,6 +260,14 @@ defineType("TypeAlias", {
}, },
}); });
defineType("OpaqueType", {
visitor: ["id", "typeParameters", "supertype", "impltype"],
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
fields: {
// todo
},
});
defineType("TypeCastExpression", { defineType("TypeCastExpression", {
visitor: ["expression", "typeAnnotation"], visitor: ["expression", "typeAnnotation"],
aliases: ["Flow", "ExpressionWrapper", "Expression"], aliases: ["Flow", "ExpressionWrapper", "Expression"],

View File

@ -70,6 +70,7 @@ getBindingIdentifiers.keys = {
DeclareVariable: ["id"], DeclareVariable: ["id"],
InterfaceDeclaration: ["id"], InterfaceDeclaration: ["id"],
TypeAlias: ["id"], TypeAlias: ["id"],
OpaqueType: ["id"],
CatchClause: ["param"], CatchClause: ["param"],
LabeledStatement: ["label"], LabeledStatement: ["label"],