TypeScript 词条目录
前端Wiki/词条/装饰器

装饰器

定义用 @ 符号标注的语法,给类、方法、属性、参数附加额外行为

装饰器是一种用 @ 符号标注的语法,可以给类、方法、属性、参数附加额外逻辑,常见于 NestJS、TypeORM 等后端框架,比如 @Controller、@Get 把普通方法标记为路由。它本质上是一个高阶函数:接收目标对象,返回修改后的对象,横向扩展功能而不侵入业务代码。

装饰器在 TS 中默认关闭,需要在 tsconfig 里开启 experimentalDecorators,且只能用于 class 成员。TC39 标准版装饰器从 TS 5.0 起支持,与旧的实验性实现并不兼容;旧的 emitDecoratorMetadata 加 reflect-metadata 方案则伴随大量现存框架。

JavaScript
// 需在 tsconfig 开启 experimentalDecorators
function Log(target: any, key: string, desc: PropertyDescriptor) {
  const fn = desc.value;
  desc.value = function (...args: any[]) {
    console.log('调用', key, args);
    return fn.apply(this, args);
  };
}

class Service {
  @Log
  save(name: string) { return name; }
}

new Service().save('tom');   // 控制台:调用 save ['tom']
⚠ 常见误区
🔗 相关词条装饰器基础reflect-metadata 与类型元信息
← 返回来源章节装饰器基础