Articles in this series
Introduction to Narrowing Concept Typescript documentation explains this topic really well. I am not going to copy and paste the same description...