Iterating and creating a union = use a distributive conditional
Iterating and creating an object/array = use a mapped type
Use recursion if you can't use any of the above
Over encouraging abstraction, design patterns, oop and fp for learning developers was definitely a mistake. I don't ever remember being encouraged to write simple code
I still think those repulsed by advanced TS just haven't done it enough. It's a small and quirky functional language. The great thing is there aren't any side effects you have to worry about