Decorators are a stage 2 proposal feature for JavaScript and are available as an experimental feature of TypeScript. Decorators, at their core, are just functions. Such functions can be used on different kinds of declarations, such as classes and their members, as well as parameters.
Decorators can emit metadata that can be inspected later by other code or processes, enabling a meta-programming style. Considering your background in .NET, you can think about TypeScript decorators as .NET attributes. Unlike .NET attributes, though, decorator functions can actually manipulate the decorated code.
Decorators are considered a somewhat advanced feature of TypeScript and there's much to learn in that regard. The depth of this feature is not in the scope of this chapter yet, so it is important that you get you familiar with it since Angular uses it quite extensively.
The following is an example of a simple class decorator that logs to the console every time a decorated class is instantiated...