TypeScript 基础指南:装饰器(Decorators)

装饰器(Decorators)是 TypeScript 引入的一种元编程语法,它可以在编译时或运行时修改类、属性、方法和参数的行为。装饰器提供了一种声明式语法来对类成员进行元编程,增强了 TypeScript 的表现力和灵活性。

装饰器的基本语法如下:
@decorator
class MyClass {
  @decorator
  myMethod(@decorator parameter) {
  }
}
在这个例子中:
@decorator 是一个装饰器函数,它可以被应用于类、属性、方法或参数。
这些装饰器函数可以访问和修改被装饰的目标。
装饰器有以下几种类型:
类装饰器
应用于类构造函数,可以观察、修改或替换类的定义。
属性装饰器
应用于类的属性,可以观察和修改属性的定义。
方法装饰器
应用于类的方法,可以观察、修改或替换方法的定义。
参数装饰器
应用于类方法的参数,可以观察和修改参数的定义。
下面是一个简单的例子,演示了如何使用类装饰器:
function sealed(constructor: Function) {
  Object.seal(constructor);
  Object.seal(constructor.prototype);
}

@sealed
class BankAccount {
  balance: number;

  deposit(amount: number) {
    this.balance += amount;
  }
}

let account = new BankAccount();
account.balance = 0;
account.deposit(100);
account.balance = -10; // Error: Cannot add or remove sealed properties
在这个例子中:
1.
我们定义了一个 sealed 装饰器函数,它使用 Object.seal() 方法密封了类和它的原型。
2.
我们将 @sealed 装饰器应用于 BankAccount 类。
3.
由于类被密封,我们无法向 BankAccount 实例添加或删除属性。
装饰器的其他常见用途包括:
授权和访问控制
可以使用装饰器实现基于角色的访问控制。
日志和调试
可以使用装饰器记录方法调用、参数和返回值。
缓存和memoization
可以使用装饰器为方法结果提供缓存功能。
依赖注入
可以使用装饰器实现简单的依赖注入机制。

总之,装饰器是 TypeScript 中一个非常强大的元编程特性,它允许开发者以声明式的方式扩展和修改代码的行为。通过合理使用装饰器,开发者可以编写出更加灵活、可测试和可维护的代码。