【十月打卡】第64天 TypeScript(20)
2022/10/9 4:23:56
本文主要是介绍【十月打卡】第64天 TypeScript(20),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
reflect-metadata
Reflect Metadata 是 ES7 的一个提案,它主要用来在声明的时候添加和读取元数据。
我们想要使用这个功能,可以安装reflect-metadata
// 安装 npm i reflect-metadata --save // 引入 import 'reflect-metadata'
API用法
namespace Reflect { // 用于装饰器 metadata(k, v): (target, property?) => void // 在对象上面定义元数据 defineMetadata(k, v, o, p?): void // 是否存在元数据 hasMetadata(k, o, p?): boolean hasOwnMetadata(k, o, p?): boolean // 获取元数据 getMetadata(k, o, p?): any getOwnMetadata(k, o, p?): any // 获取所有元数据的 Key getMetadataKeys(o, p?): any[] getOwnMetadataKeys(o, p?): any[] // 删除元数据 deleteMetadata(k, o, p?): boolean }
示例
class Test { getName() {} } class Teacher extends Test {} Reflect.defineMetadata('name', '小明', Test); const isExist = Reflect.hasMetadata('name', Teacher); // true const isExist1 = Reflect.hasOwnMetadata('name', Teacher); // false const res = Reflect.getMetadata('name', Teacher); // 小明 const res1 = Reflect.getOwnMetadata('name', Teacher); // undefined
- hasMetadata、getMetadata、getMetadataKeys 会沿着原型链查找
- hasOwnMetadata、getOwnMetadata、getOwnMetadataKeys 不会沿着原型链查找,只获取当前
应用在装饰器上
如果在装饰器上使用需要metadata
class Test { @Reflect.metadata('age', 15) getAge() {} } const isExist = Reflect.hasMetadata('age', Test.prototype, 'getAge'); const res = Reflect.getMetadata('age', Test.prototype, 'getAge');
装饰器的执行顺序
function showData(target: typeof User) { const data = Reflect.getMetadata('name', target.prototype, 'getName'); console.log(data); // '小明' } @showData class User { @Reflect.metadata('name', '小明') getName() {} }
上述示例data可以打印出来,表示方法上的装饰器先执行,类的装饰器后执行
这篇关于【十月打卡】第64天 TypeScript(20)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升