flow plugin: generate exact object type annotations (#3702)

This commit is contained in:
Basil Hosmer
2016-09-20 02:10:55 -07:00
committed by Daniel Tschinder
parent fa7321f978
commit cb4b2b0744
3 changed files with 37 additions and 2 deletions

View File

@@ -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) {
@@ -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) {

View File

@@ -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; |};

View File

@@ -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 |};