facebook / facebook/flow

Order sensitivity bug in refinements for intersection types

Aperta
#4,545 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
bug Typing: unions/intersections
Lingua principale
Rust
Stelle
22.3k
Fork
1.9k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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];
...
```

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.