TypeScript: Create a condition-based subset types

Deep dive into typing system to solve THE ultimate riddle