You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
constraw: string[]|(string|null)[]=[];constfiltered: string[]=raw.filter((step: string|null): step is string=>typeofstep==='string')// KO// Type '(string | null)[]' is not assignable to type 'string[]'.
constraw: string[]|(string|null)[]=["plop",null];constfiltered: string[]=raw.filter((step: string|null): step is string=>typeofstep==='string')// OK no error
🙁 Actual behavior
There is a strange difference in control flow when you filter nullish values in an array regarding the declaration of that array. This is definitely a edge case. The type string[] | (string | null)[] comes from an union type in my case.
🙂 Expected behavior
No difference and typeguard should work (regardless the fact it is valid).
Additional information about the issue
I first thought it was a regression due to #57465 but I tested it on several version. The issue has always been here. I looked into a lot of issues about typeguards and filters but unfortunately, could not find one similar to my issue 😢
Thanks anyway for the great job
The text was updated successfully, but these errors were encountered:
🔎 Search Terms
filter + typeguard + control flow + strictNullChecks
🕗 Version & Regression Information
⏯ Playground Link
https://www.typescriptlang.org/play/?strict=false&noImplicitAny=false&strictFunctionTypes=false&strictPropertyInitialization=false&strictBindCallApply=false&noImplicitThis=false&noImplicitReturns=false&alwaysStrict=false&esModuleInterop=false&declaration=false&target=0&jsx=0&module=0&ts=5.6.2&experimentalDecorators=false&emitDecoratorMetadata=false#code/MYewdgzgLgBATgQwO4C4bTgSzAcwNoC6MAPjAIJyICeAPBtjiTGAK4A2bAfDALwyEBuAFBDQkWADNMbKAFM4sgCZp6uQr3jIAdFJnyAFPuiyADiqhZcTVhwCU50zEwR0Fhr25QqJ2SAmvHHiCYAHJVHBDbGAB6aJgAaQB5ETFoV0scACVkcwz1UgpqOjcrUhsuDTwAIhM2EBMqgmFRcDTwgDFpOQVldIZ1PnDspB0ugyM5Mz7S5nY2ewCTJxdwjxgvHz9F3mCwkoio2ITklvFZjmHc-qICygRaVbK57j48cqaU1thyzr0eq7URD45WGoz+hmMU0e53mDiWzmmjB4nm8vn8kJ2fD2GUiMTiiXinzO5QACmwWBAAMr7S6I-LkO4PfbWZ6VGp1BoAGhhH1OaVJ5Kp+1+3SUAPwQJhZIp1IyoN03Qhk3FLLscOWiLWGzR2yCWPCuKOBKEQA
💻 Code
🙁 Actual behavior
There is a strange difference in control flow when you filter nullish values in an array regarding the declaration of that array. This is definitely a edge case. The type
string[] | (string | null)[]
comes from an union type in my case.🙂 Expected behavior
No difference and typeguard should work (regardless the fact it is valid).
Additional information about the issue
I first thought it was a regression due to #57465 but I tested it on several version. The issue has always been here. I looked into a lot of issues about typeguards and filters but unfortunately, could not find one similar to my issue 😢
Thanks anyway for the great job
The text was updated successfully, but these errors were encountered: