将参数传递给类装饰器
我们可以用另一个函数包装一个类装饰器来允许自定义:
function addMetadata(metadata: any) {
return function log(target: any) {
// Add metadata
target.__customMetadata = metadata;
// Return target
return target;
}
}
addMetadata
将一些参数用作配置,然后返回一个未命名的函数,它是实际的装饰器。在装饰器中,我们可以访问参数,因为有一个闭包。
然后我们可以调用装饰器传递一些配置值:
@addMetadata({ guid: "417c6ec7-ec05-4954-a3c6-73a0d7f9f5bf" })
class Person {
private _name: string;
public constructor(name: string) {
this._name = name;
}
public greet() {
return this._name;
}
}
我们可以使用以下函数来访问生成的元数据:
function getMetadataFromClass(target: any) {
return target.__customMetadata;
}
console.log(getMetadataFromInstance(Person));
如果一切正常,控制台应显示:
{ guid: "417c6ec7-ec05-4954-a3c6-73a0d7f9f5bf" }