Design-time metadata makes it possible to take advantage of features like reflection or dependency injection in JavaScript. Have you ever wondered how it is it possible that either Angular or NestJS automatically resolves relations between your classes? Or how can you access method param types to perform auto-validation of input parameters? Let's have an in-depth look at TypeScript metadata and see what we can achieve using this powerful mechanism.