type-level-programming

Overloads & Conditional Types in TypeScript