facebook / facebook/flow

Cannot infer Object type if it is union type on interface property

Open
#2,437 0 comments 0 reactions 0 assignees View on GitHub
Typing: unions/intersections
Dominant language
Rust
Stars
22.3k
Forks
1.9k
PR merge metrics
No merged PRs in 30d

Description

Hi, I'm facing this problem but I cannot find the description about this behavior in documentation.

**Version** 0.32.0

**Reproduction**
https://tryflow.org/?code=LyogQGZsb3cgKi8KCmludGVyZmFjZSBPcHRpb25zIHsKICBib2R5OiBPYmplY3QgfCBGb3JtRGF0YTsKfQoKY29uc3Qgb3B0aW9uczogT3B0aW9ucyA9IHsKICBib2R5OiB7CiAgICBmb286ICdmb28nLAogICAgYmFyOiB0cnVlCiAgfQp9

``` js
/* @flow */
interface Options {
body: Object | FormData;
}

const options: Options = {
body: {
foo: 'foo',
bar: true
}
}
```

**Expected behavior**
Successfully compiled without error.

**Actual behavior**
Failed to compile and the following error is printed.

```
test.js:8
8: body: {
^ property `bar`. Property not found in
4: body: Object | FormData;
^^^^^^^^ FormData

test.js:8
8: body: {
^ property `foo`. Property not found in
4: body: Object | FormData;
^^^^^^^^ FormData

Found 2 errors
```

Note that if I remove `FormData` from the type of `body` or cast `body` value to `Object` explicitly, the error is not occurred.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.