Order sensitivity bug in refinements for intersection types
- Dominant language
- Rust
- Stars
- 22.3k
- Forks
- 1.9k
- PR merge metrics
- No merged PRs in 30d
Description
This code throws an error (see https://flow.org/try/#0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgDyARgFZgC8YA3qmGAIYBcYAdgK4C2xeATmKgC+YAGQ06YYiwDOGXgEtWAcwGCA3OijtWAYwzy4rMBjyyAFDDxQMLEqQA0YBUoAWNomQCU4+rzwZ2XiM7PD0AOgBrPCxpCysMTzCoRQATMwjKAD4fejBpBHkMHRcwdO9aXNydBmkCAHJiOpY-AKCwS2sAbQiAXUoKKmc3bp6NSvpq2rA6hianf0CjDowR-sH5VxXesdzBCUFPDT3USwx2+MoaRhYARkcpaYAPOrB1E-8nDbdL6muwACZ7iw6lgXm9MKYMHFrI4hgkNEA):
```js
/* @flow */
type Obj = {
a: number
} & {
b: string
};
function test(left: Obj, right: Obj) {
return Object.keys(left).find(k => {
switch (k) {
case 'b': return left[k] === right[k];
case 'a': return left[k] === right[k];
}
});
}
let left = { a: 1, b: 'x' };
let right = { a: 2, b: 'y' };
test(left, right);
```
```
12: case 'b': return left[k] === right[k];
^ property `b`. Property not found in
3: type Obj = { ^ object type
12: case 'b': return left[k] === right[k];
^ property `b`. Property not found in
3: type Obj = { ^ object type
```
It works fine though if we switch `case 'a'` and `case 'b'`:
```
...
case 'a': return left[k] === right[k];
case 'b': return left[k] === right[k];
...
```
Contributor guide
Assessment
This issue has not been assessed yet.