TypeScript supports runtime type assertions, but it doesn't mandate them or write them for you.
I should have said your type system cannot be sound without runtime overhead. And I don't believe that choosing automatic runtime overhead is the right move.