目录
作用:
元数据指的是对 数据 及 信息资源 的描述性信息
reflect-metadata 在定义类或者类方法的时候,
可以设置一些元数据,之后可以获取到在类与类方法上添加的元数据
用法:
npm i reflect-metadata --save
装饰器中使用:
import 'reflect-metadata';
设置元数据
设置:
类装饰器 : Reflect.defineMetadata('键名',值,类的构造函数)
其他装饰器: Reflect.defineMetadata('键名',值,类的构造函数,'属性名称')
// 把target构建函数的每个 属性(key)中 定义元数据 'path'
export function get(path: string) {
return function(target: any, key: string) {
Reflect.defineMetadata('path', path, target, key);
};
}
获取:
获取类装饰器上的元数据: Reflect.getMetadata('键名',类名)
获取属性上的元数据 :Reflect.getMetadata('键名',类名,'属性名称')
// 获取 target 构造函数上每个 key的 元数据 'path'
export function controller(target: any) {
for (let key in target.prototype) {
console.log(Reflect.getMetadata('path', target.prototype, key));
}
}
以上两个装饰器 的使用
import { controller, get } from './decorator';
装饰器执行顺序由下到上
先执行 : @get 中传入 path
再执行 : @controller 中能获取到 path 对应的值
@controller
class LoginController {
@get('/login')
login() {}
}
总结:
reflect-metadata 装饰器中使用可以 简单理解成 为对象或者属性 赋值、取值的过程
官方文档https://www.typescriptlang.org/docs/handbook/decorators.html#metadata