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 等,迁移时需注意。