Skip to content

Commit

Permalink
flow plugin: generate exact object type annotations (babel#3702)
Browse files Browse the repository at this point in the history
  • Loading branch information
bhosmer authored and panagosg7 committed Jan 17, 2017
1 parent 3e2c418 commit 0967256
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 2 deletions.
13 changes: 11 additions & 2 deletions packages/babel-generator/src/generators/flow.js
Expand Up @@ -250,7 +250,12 @@ export function TypeParameterInstantiation(node: Object) {
export { TypeParameterInstantiation as TypeParameterDeclaration };

export function ObjectTypeAnnotation(node: Object) {
this.token("{");
if (node.exact) {
this.token("{|");
} else {
this.token("{");
}

let props = node.properties.concat(node.callProperties, node.indexers);

if (props.length) {
Expand All @@ -270,7 +275,11 @@ export function ObjectTypeAnnotation(node: Object) {
this.space();
}

this.token("}");
if (node.exact) {
this.token("|}");
} else {
this.token("}");
}
}

export function ObjectTypeCallProperty(node: Object) {
Expand Down
Expand Up @@ -102,3 +102,16 @@ export type { foo } from "bar";
export interface foo { p: number };
export interface foo<T> { p: T };
var a: ?Array<?string>;
var a: {| numVal: number |};
var a: {| numVal: number; |};
var a: {| numVal: number; [indexer: string]: number |};
var a: ?{| numVal: number |};
var a: {| numVal: number; strVal: string |}
var a: {| subObj: {strVal: string} |}
var a: {| subObj: ?{strVal: string} |}
var a: {| param1: number; param2: string |}
var a: {| param1: number; param2?: string |}
var a: {| [a: number]: string; [b: number]: string; |};
var a: {| add(x: number, ...y: Array<string>): void |};
var a: {| subtract: (x: number, ...y: Array<string>) => void |};
var a: {| id<T>(x: T): T; |};
Expand Up @@ -106,3 +106,16 @@ export type { foo } from "bar";
export interface foo { p: number };
export interface foo<T> { p: T };
var a: ?Array<?string>;
var a: {| numVal: number |};
var a: {| numVal: number |};
var a: {| numVal: number; [indexer: string]: number; |};
var a: ?{| numVal: number |};
var a: {| numVal: number; strVal: string; |};
var a: {| subObj: { strVal: string } |};
var a: {| subObj: ?{ strVal: string } |};
var a: {| param1: number; param2: string; |};
var a: {| param1: number; param2?: string; |};
var a: {| [a: number]: string; [b: number]: string; |};
var a: {| add: (x: number, ...y: Array<string>) => void |};
var a: {| subtract: (x: number, ...y: Array<string>) => void |};
var a: {| id: <T>(x: T) => T |};

0 comments on commit 0967256

Please sign in to comment.