TypeScript中的元数据(Metadata)
注意:元数据是 Angular 以及 Nestjs 依赖注入实现的基础,请务必看完本章节。
因为Decorators是实验性特性,所以如果想要支持装饰器功能,需要在tsconfig.json中添加以下配置。
{"compilerOptions": {"experimentalDecorators": true,"emitDecoratorMetadata": true}}
使用元数据需要安装并引入reflect-metadata这个库。这样在编译后的 js 文件中,就可以通过元数据获取类型信息。
// 引入reflect-metadataimport 'reflect-metadata';
你们应该会比较好奇,运行时JS是如何获取类型信息的呢?请紧张地继续往下看:
引入了reflect-metadata后,我们就可以使用其封装在Reflect上的相关接口,具体请查看其文档。然后在装饰器函数中可以通过下列三种metadataKey获取类型信息。
design:type: 属性类型design:paramtypes: 参数类型design:returntype: 返回值类型
