An example of union types: many API in JS accept HTTP verbs as strings. With union types, you can say something like:
type HttpVerb = "GET" | "POST" | "PUT" | "DELETE";
But you can also do more complex stuff:
type User = {name: string; password: strings} | OAuthID;
By themselves they aren't hard to understand or use.
As an aside, compared to sum types, you don't have to define them before using them: a function can return number | null while in language with sum types you usually define option first and then return option<number>.
As an aside, compared to sum types, you don't have to define them before using them: a function can return number | null while in language with sum types you usually define option first and then return option<number>.