TypeScript supports disjoint unions: http://blogs.msdn.com/b/typescript/archive/2015/09/16/announ...
The two real pain points (among those you mentioned) of TypeScript are bivariant function parameters and structural classes, since they lead to potentially unsound code that compiles.