flow plugin: generate exact object type annotations (#3702)
This commit is contained in:
committed by
Daniel Tschinder
parent
fa7321f978
commit
cb4b2b0744
@@ -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) {
|
||||
|
||||
@@ -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; |};
|
||||
|
||||
@@ -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 |};
|
||||
|
||||
Reference in New Issue
Block a user