Understandably so, it's the impressive power of TypeScript's type system. No other mainstream language has arbitrary union types like this.
The more distinctive features in TypeScript would be what you can to with keyof/typeof, indexed access types, conditional types and especially mapped types.
Out of curiosity, what do you mean by dynamically? Isn't that just a case statement, or am I misunderstanding?
You can do this in Python too..?