Cannot refine type that's part of an intersection type
- Lingua principale
- Rust
- Stelle
- 22.3k
- Fork
- 1.9k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Reproduction: https://flow.org/try/#0C4TwDgpgBAYg9nAglAvFA3gKClA1gSwDsATALigHIBDCgGmyivMIFcBbAIwgCd6BfTJlCRYCAEKoMDAiXIUOdBh2bsuvTAKHho8OJN3IAPqLhiA3IOE6EiFgHM2EQsCrB8cQgGdJWHByrcKpw89H5UAF5BahoWmAD0cVAAKgAW+N7EcBDehHDAUADucNy4WiK2Dk7AEMS6kgAUBlDGumIAlFAAZCYVjs6u7l4WAGYshADGbh5QmYipRHb1wwjkvVU1um1RPFI4+MNQSwgAdDLEqCho1BQdvjhQ3BDALNyEUMtwx1QWOAI4DI9nq8oABGAAMFk0CWSaQyWU8mFGEymb1muWAKR480Iiw+5E2224uyg+0OH1ORHOlyuNFuDBwgJeb3J3wYfygAKeTNBEI0QA
Basically, if we have some type `T = (A | B) & C`, when we perform a check on a value of type `T` that would be able to refine `A | B` to `A`, we should be able to refine `(A | B) & C` to `A & C`.
Possibly related, changing `type AugmentedFoo = (FooA | FooB) & FooAugmentation` to `type Foo = FooA | FooB; type AugmentedFoo = Foo & FooAugmentation` causes a second error: https://flow.org/try/#0C4TwDgpgBAYg9nAglAvFA3gKClA1gSwDsATALigHIBDCgGmyivMIFcBbAIwgCd6BfTJlCRYCAEKoMDAiXIUOdBh2bsuvTAKHho8OJN3IAPqLhiA3IOE6EiFgHM2EQsCrB8cQgGdJWHByrcKpw89H5UAF5BahoWmAD0cVAAKgAW+N7EcBDehHDAUADucNy4WiK2Dk7AEMS6+ghQAGQmFY7Oru5eFgBmLIQAxm4eUJmIqUR2ABTdCOStVTW6AJRRPFI4+N1Q0wgAdDLEqCho1BRL6zhQ3BDALNyEUDNwu1QWOAI4DNe391AAjAAGCyaBLJNIZLKeTC9AZDB6jXLAFI8caEKZPcjLVbcC6bbZPfZEQ7HE40c6+S7fO4PAmvBgfKBfG7U-5AjRAA
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.