TypeScript 装饰器是什么?有哪些类型(以类装饰器为例)?

装饰器是在不修改原代码前提下为类/方法/属性添加行为的语法糖,本质是接收目标做加工并返回的函数。需在 tsconfig 开 experimentalDecorators: true。

function Log(target: any, ctx: ClassDecoratorContext) {
  console.log('装饰了类', ctx.name)
}
@Log
class UserService {}

// 方法装饰器:记录调用耗时
function Measure(_t: any, _k: string, desc: PropertyDescriptor) {
  const fn = desc.value
  desc.value = function (...args: any[]) {
    const t = Date.now(); const r = fn.apply(this, args); console.log(Date.now() - t); return r
  }
}

类型:类装饰器、方法/访问器装饰器、属性装饰器、参数装饰器;Angular 与(旧版)NestJS 大量使用。注意 TC39 新装饰器标准已与 TS 旧实现不同,新版用 ClassDecoratorContext 等,迁移时需注意。

同分类其他题目