Sane languages have a downcast mechanism that doesn't pretend it succeeds every time.
Also weird that Typescript has exactly the mechanism you're talking about. Why are you acting like it doesn't?