我们使用@decorator来定义类装饰器。
但是,如果我们在同一个文件中有多个装饰器和多个类,装饰器如何映射到它们的类呢?
或者我们不能在同一文件中使用多个装饰器吗?
或者我们不能在同一文件中使用多个装饰器吗?
是的,您可以在同一文件中使用多个修饰器。您甚至可以在同一类声明中使用多个装饰器,请参见下文。
装饰器如何映射到他们的类?
装饰器实际上是一个函数。它映射到它旁边的声明。
来自 TypeScript 手册 - 装饰器文档:
装饰
装饰器是一种特殊的声明,可以附加到 类声明、方法、访问器、属性或参数。 装饰者使用形式
@expression
,expression
必须 评估为将在运行时使用信息调用的函数 关于装饰声明。例如,给定装饰器
@sealed
我们可以编写sealed
功能如下:function sealed(target) { // do something with 'target' ... }
因此,同样,您可以在一个文件中有多个装饰器,它们将应用于它旁边的类声明、方法、访问器、属性或参数。
可运行演示
由于始终欢迎可运行的演示,因此这里有一个。
在下面的代码中,每个装饰器将为其修饰的每个类打印一条消息。如您所见,单个类的多个装饰器,多个类,都在一个文件中。
function MyDecoratorOne(target) {
console.log('MyDecoratorOne decorating class: ' + target.name);
}
function MyDecoratorTwo(target) {
console.log('MyDecoratorTwo decorating class: ' + target.name);
}
@MyDecoratorOne
@MyDecoratorTwo
class Aaa {
aaaMethod() {}
}
@MyDecoratorOne
@MyDecoratorTwo
class Bbb {
bbbMethod() {}
}
输出:
MyDecoratorTwo decorating class: Aaa
MyDecoratorOne decorating class: Aaa
MyDecoratorTwo decorating class: Bbb
MyDecoratorOne decorating class: Bbb
演示JSFiddle在这里。