Refinement of polymorphic type does not work
- Vorherrschende Sprache
- Rust
- Sterne
- 22.3k
- Forks
- 1.9k
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Refining a type which has a polymorphic subtype doesn't seem to work properly.
Here's the code:
```js
export type InnerTypeA = {
type: "A",
};
export type InnerTypeB = {
type: "B",
};
export type InnerType = InnerTypeA | InnerTypeB;
type OuterType = {
inner: T,
};
export type OuterTypeA = OuterType;
export type OuterTypeB = OuterType;
function test(a: OuterTypeB) {}
function test2(a: OuterType) {}
function b(a: OuterType) {
if (a.inner.type === "B") {
// Doesn't work:
test(a);
// Works, which means the inner refinement is still there
// test({inner: a.inner});
// Works, which means the outer refinement is also there?
// test2(a);
}
}
b({inner:{type:"B"}})
```
[Online Flow-try](https://flow.org/try/#0KYDwDg9gTgLgBDAnmYcCSA7DwoBVnACCcAvHAN4BQcCBAXHAESGMA0lAvgNyWWiSxaKdFhz4UAIVIVqQ4A0YS2nHn3DR4SYZmx4C0nWILEAPiN3jgE1VtQB5AK4wjKADy4GhvSgB80qjQAlqJQDLjs3Lz8GnJwjs7eRNLxLsCuXpaEPjzRgrZxTqlSZCmJ6SGWEtm8AGYOGADGMIEQGAjAAM4wABQAhgyllQCUFByUdY3Nre1dAEzuPn0DhWW4PiPkY+P1TS1tAEbunhUEi-0FCZYLG7KBNXB9AHTBuo-5JB9MSjc0NAD0fzgABEIJ0MAByeAAd2gAGs6LIaM4un0hqpfnAAXAAOpwjqsOBQgAWgQaRLgAFtgL0MB0EETUC8cHAoMAasFgFSMPBAnSuoEADYC+k4YCIzGA5E9chM0JwXrPEIcNHi8VY3FQWH4wkksmU6m0kVwCArFlsjlcnl03oCjoQEWsgD8aslnRgs1RPBoYy2+26MpCdHItjoikYHGVQA).
This doesn't seem to be expected "pessimistic refinement" behaviour, since no other function calls happen between the guard and the type check.
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.