🔎 Search Terms
"Inferred Type Predicates"
🕗 Version & Regression Information
5.6.0-dev.20240801
⏯ Playground Link
https://www.typescriptlang.org/play/?ts=5.6.0-dev.20240801#code/C4TwDgpgBA8lC8UDeUDWEQC4oGdgCcBLAOwHMoBfAbgCgBjAe2LygYCMArHbACjgB8oxAK4AbUQEoA2gF0EUKSnRYoAcgCGqygBpkaDNlVstFXSPEzajZsCgAzQqOAR8EACYBGeey4A6B04uPDgIAHy4UACEiOaSVFAA9AmwsvRMLAHOrm4ATN6cOP6OWcFhEdFCYqJQAGQ1uL7KCIgaqhLxSVB8UIKx0jJpNvbFLu4AzPl+mUEh8OEhFX1Fgfilcw1N8C2a7YnJMKlAA
💻 Code
typeO={key: string};constobjs: (O|null)[]=[{key: 'a'},{key: 'b'},null];constfiltered1=objs.filter(s=>s!=null);// O[]constfiltered2=objs.filter(s=>s!=null&&s.key=='a');// (O | null)[]constfiltered3=objs.filter(s=>s!=null).filter(s=>s.key=='a');// O[]🙁 Actual behavior
The type inferred for filtered2 is (O | null)[] instead of O[].
🙂 Expected behavior
I would expect filtered2 to have the inferred type O[], similar to filtered1 and filtered3.
Additional information about the issue
No response
🔎 Search Terms
"Inferred Type Predicates"
🕗 Version & Regression Information
5.6.0-dev.20240801
⏯ Playground Link
https://www.typescriptlang.org/play/?ts=5.6.0-dev.20240801#code/C4TwDgpgBA8lC8UDeUDWEQC4oGdgCcBLAOwHMoBfAbgCgBjAe2LygYCMArHbACjgB8oxAK4AbUQEoA2gF0EUKSnRYoAcgCGqygBpkaDNlVstFXSPEzajZsCgAzQqOAR8EACYBGeey4A6B04uPDgIAHy4UACEiOaSVFAA9AmwsvRMLAHOrm4ATN6cOP6OWcFhEdFCYqJQAGQ1uL7KCIgaqhLxSVB8UIKx0jJpNvbFLu4AzPl+mUEh8OEhFX1Fgfilcw1N8C2a7YnJMKlAA
💻 Code
🙁 Actual behavior
The type inferred for
filtered2is(O | null)[]instead ofO[].🙂 Expected behavior
I would expect
filtered2to have the inferred typeO[], similar tofiltered1andfiltered3.Additional information about the issue
No response