Opening drill
How do generics and constraints make a TypeScript API reusable without weakening its contract? | Aporeon