在定义类或者类方法的时候,可以设置一些元数据,可以获取到在类与类方法上添加的元数据,元数据指的是描述东西时用的数据。
(1)下载
cnpm i reflect-metadata --save
(2)使用
import 'reflect-metadata';
方式一:在装饰器函数中使用
设置:
类装饰器:Reflect.defineMetadata('键名',值,类的构造函数)
其他装饰器:eflect.defineMetadata('键名',值,类的构造函数,'属性名称')
若使用:Reflect.metadata,必须得return出去即调用装饰器(@xx()),因为Reflect.metadata是作为装饰器使用的
function xx(target:any) {
return Reflect.metadata('role', 'jfff');
}
@xx('w')
class Post {
name=''
}
获取:
Reflect.getMetadata('键名',类名); 获取类装饰器上的元数据
Reflect.getMetadata('键名',类名,'属性名称'); 获取属性上的元数据
方式二:充当装饰器使用
@Reflect.metadata('键名', 值)
class C{
@Reflect.metadata('键名', 值)
属性
}
获取:
Reflect.getMetadata('键名',类名); 获取类装饰器上的元数据
Reflect.getMetadata('键名',类名,'属性名称'); 获取属性上的元数据
代码示例:
import 'reflect-metadata';
function xx(target:any) {
// Reflect.defineMetadata('role','jefffs',target)
return Reflect.metadata('role', 'jfff');
}
@xx('w')
class Post {
@Reflect.metadata('role', 'jeff')
name=''
}
const metadata = Reflect.getMetadata('role', Post);
const me=Reflect.getMetadata('role',new Post(),'name')
console.log(metadata);
console.log(me);
import 'reflect-metadata';
function xx(target:any) {
Reflect.defineMetadata('role','jefffs',target)
// return Reflect.metadata('role', 'jfff');
}
@xx
class Post {
@Reflect.metadata('role', 'jeff')
name=''
}
const metadata = Reflect.getMetadata('role', Post);
const me=Reflect.getMetadata('role',new Post(),'name')
console.log(metadata);
console.log(me);