TypeScript 2.8: Conditional Types
blog.mariusschulz.com