使用類裝飾器生成後設資料
這次我們將宣告一個類裝飾器,它將在我們應用它時為類新增一些後設資料:
function addMetadata(target: any) {
// Add some metadata
target.__customMetadata = {
someKey: "someValue"
};
// Return target
return target;
}
然後我們可以應用類裝飾器:
@addMetadata
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(getMetadataFromClass(Person));
當我們建立類的例項時,在宣告類時應用裝飾器。這意味著後設資料在類的所有例項之間共享:
function getMetadataFromInstance(target: any) {
return target.constructor.__customMetadata;
}
let person1 = new Person("John");
let person2 = new Person("Lisa");
console.log(getMetadataFromInstance(person1));
console.log(getMetadataFromInstance(person2));