In this chapter, we have had an in-depth discussion on decorators, generics, advanced generics, and asynchronous programming techniques using promises and async await. We have seen how decorators provide a way of injecting code into, or modifying, class definitions. We have also explored the use of experimental metadata information when working with decorators and class definitions. Our discussion then turned to generics, what they are, and how they are used. We worked through generic interfaces, and creating objects within generic functions. We then explored some advanced generic syntax, including conditional types and mapped types. Our final discussion revolved around asynchronous programming techniques using callbacks, promises, and the async and await keywords.
In the next chapter, we will look at the mechanism that TypeScript uses to integrate with existing JavaScript...