Thanks for elaborating on the distinction. User defined type guards can get you some of the way there to distinguishing "int | int", but you don't get it for free-- the reality of being a superset of JavaScript.
https://gist.github.com/RikkiGibson/74fa3dbfdb1b2d7ab86d