🔎 Search Terms
filter is type narrow negative
🕗 Version & Regression Information
- This starts on version 5.5
⏯ Playground Link
https://www.typescriptlang.org/play/?ts=5.5.2#code/C4TwDgpgBAggdgSwLYEMA2UC8UDeAoKKAIwCcIVgALALimBIFcIAaPAXwG489RIoAlAPYBjANZZcBYmQo0oAM3QBnFuy49w0AMqCkEKgjgBzCfGTooAHwEjR6+QzjDgCQXCgIlZ1GgAUS3X1KQyNaHT0DYwBKWgCI4OMPJVhEH0lCMmAGEnc4oJCAOlJyKnZuYTclYDoIKoBGMMDIk2x8QmLZWnomVjZyyurgWuAAJkb4kIk26RK5RTQVXvUKuCq6YKUASSUAeXFsAG0h+uYaqpGAXQL5BDQhkl9qzAA+JO90R6iorgB6H8IAYQAHoAfhS5jQBwu-VWgw22wA6iQ3C0oEdhnVTsdRlcbncIA8nq8AISed5+YBfX7-QHAsG+clWGxiKJQvBAA
💻 Code
typeAnimal={breath: true,};typeRock={breath: false,};typeSomething=Animal|Rock;functionisAnimal(something: Something): something is Animal{returnsomething.breath}consttest1: Something={breath: true,}consttest2: Something={breath: false,};constthisIsOk=[test1,test2].filter(t=>isAnimal(t));// ^? Animal[]constthisIsWrong=[test1,test2].filter(t=>!isAnimal(t));// ^? (Animal | Rock)[]🙁 Actual behavior
constthisIsOk=[test1,test2].filter(t=>isAnimal(t));// ^? Animal[]constthisIsWrong=[test1,test2].filter(t=>!isAnimal(t));// ^? (Animal | Rock)[]
🙂 Expected behavior
constthisIsOk=[test1,test2].filter(t=>isAnimal(t));// ^? Animal[]constthisIsShouldBe=[test1,test2].filter(t=>!isAnimal(t));// ^? Rock[]
Additional information about the issue
Filtering is working only if "positive", but if the "is" is used as a negative then it don't type narrow.
🔎 Search Terms
filter is type narrow negative
🕗 Version & Regression Information
⏯ Playground Link
https://www.typescriptlang.org/play/?ts=5.5.2#code/C4TwDgpgBAggdgSwLYEMA2UC8UDeAoKKAIwCcIVgALALimBIFcIAaPAXwG489RIoAlAPYBjANZZcBYmQo0oAM3QBnFuy49w0AMqCkEKgjgBzCfGTooAHwEjR6+QzjDgCQXCgIlZ1GgAUS3X1KQyNaHT0DYwBKWgCI4OMPJVhEH0lCMmAGEnc4oJCAOlJyKnZuYTclYDoIKoBGMMDIk2x8QmLZWnomVjZyyurgWuAAJkb4kIk26RK5RTQVXvUKuCq6YKUASSUAeXFsAG0h+uYaqpGAXQL5BDQhkl9qzAA+JO90R6iorgB6H8IAYQAHoAfhS5jQBwu-VWgw22wA6iQ3C0oEdhnVTsdRlcbncIA8nq8AISed5+YBfX7-QHAsG+clWGxiKJQvBAA
💻 Code
🙁 Actual behavior
🙂 Expected behavior
Additional information about the issue
Filtering is working only if "positive", but if the "is" is used as a negative then it don't type narrow.