第9章:装饰器
装饰器的基本概念
什么是装饰器?
装饰器(Decorator)是一种特殊的声明,能够附加到类、方法、属性或参数上,用于修改或扩展其行为。装饰器本质上是一个函数,通过特定的语法(@expression)应用到目标上,在运行时被调用。
装饰器的核心特点
- 声明式语法:使用
@符号前缀,简洁直观。 - 元编程能力:在不修改原始代码的情况下增强功能(如日志、验证、依赖注入)。
- 组合性:支持多个装饰器叠加,按顺序执行。
装饰器的分类
TypeScript 支持以下装饰器类型:
- 类装饰器:应用于类的构造函数。
- 方法装饰器:应用于类的方法。
- 属性装饰器:应用于类的属性。
- 参数装饰器:应用于方法的参数。
- 访问器装饰器:应用于 getter/setter。
装饰器的执行时机
装饰器在代码编译阶段(而非运行时)被执行。具体顺序为:
- 参数装饰器 → 方法/访问器/属性装饰器 → 类装饰器。
- 同一类型的多个装饰器按声明顺序从下到上执行。
基本示例
// 定义一个简单的类装饰器
function logClass(target: Function) {
console.log(`类装饰器应用到: ${target.name}`);
}
@logClass
class Example {
// ...
}
装饰器的应用场景
- 日志记录:自动记录方法调用信息。
- 权限控制:检查用户权限再执行方法。
- 依赖注入(如 Angular):自动管理类依赖关系。
- 数据验证:验证方法参数或属性值。
注意事项
- TypeScript 装饰器是实验性特性,需在
tsconfig.json中启用:{ "compilerOptions": { "experimentalDecorators": true } } - 装饰器不能用于函数声明(仅限类相关目标)。
- 装饰器的设计需遵循单一职责原则,避免过度复杂化。
扩展阅读:装饰器提案目前处于 ECMAScript 标准化流程的 Stage 3 阶段,未来可能成为 JavaScript 原生语法。
