Instruction: Explain what module augmentation is, with a practical example of extending an existing module's functionalities.
Context: This question targets the candidate's knowledge of advanced TypeScript features, such as module augmentation, and their ability to extend or modify existing type declarations in a modular codebase.
Official answer available
Preview the opening of the answer, then unlock the full walkthrough.
For instance, let's assume we're using a library named UserInfo, which provides basic functionalities for user information management but lacks a specific method we need, say getUserAge. Instead of forking the library or waiting for a potential update, we can leverage module augmentation to extend its functionalities. Here's how it goes:
```typescript // Original module in the library declare module 'UserInfo' { interface User { name: string; email: string; }...