Going further with TypeScript - Part 1: Mapped Types