TypeScript - 装饰器
在 TypeScript 中,装饰器(Decorator)是一种特殊的声明形式,可以附加到类声明、方法、访问器、属性或参数上。它们允许你在不修改原始源代码的情况下,独立地修改类的行为。这使得装饰器成为面向对象编程中的强大工具,有助于编写更清晰、组织良好的代码,并遵循 DRY(Don't Repeat Yourself)原则。
装饰器通过在类声明、属性、方法或参数前添加特殊语法(@decorator
)来实现。
启用装饰器
要使用装饰器,你需要在 tsconfig.json
文件中启用 experimentalDecorators
选项:
tsconfig.json
{
"compilerOptions": {
"target": "ES5",
"experimentalDecorators": true
}
}
或者在编译时使用命令行参数指定启用装饰器,例如:
tsc --target ES5 --experimentalDecorators
装饰器语法
装饰器的基本语法如下:
@DecoratorName
其中,DecoratorName
是一个函数名,前缀为 @
符号。该表达式在运行时会被解析为 DecoratorName
函数被调用。
装饰器工厂
当你需要自定义装饰器函数如何应用于声明时,可以使用装饰器工厂(Decorator Factories)。装饰器工厂是一个返回装饰器函数的函数,允许你动态地定制装饰器的行为。
以下是装饰器工厂的语法:
function decoratorName(args: string) {
// 装饰器工厂返回一个函数表达式
return function (target) {
// 这是在运行时会被评估的装饰器
};
}
在上面的语法中,args
是传递给装饰函数的参数,target
是类的原型。
装饰器组合
你可以为同一个声明使用多个装饰器,它们可以写在同一行或不同行。
@f @g x
或
@f
@g
x