Flow type for optional field in an object

bsr picture bsr · May 11, 2016 · Viewed 8k times · Source

In the following code (Try Flow):

type Response = {
    err: ?string;
    data: Object;
}
function length(x): Response {
  return { data : {} };
}

length(10)

I made err optional, but still get an error:

Property err not found in object literal

Answer

Andrey picture Andrey · May 11, 2016

This is the correct syntax for an optional property:

type Response = {
    err?: string;
    data: Object;
}

Demo

The syntax you tried to use (err: ?string) is a Maybe type, which means the err key should be in the object and can have type string, null, or void (undefined).