將引數傳遞給類裝飾器
我們可以用另一個函式包裝一個類裝飾器來允許自定義:
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" }