TypeScript: Create a condition-based subset types
Deep dive into typing system to solve THE ultimate riddle