TypeScript中的元数据(Metadata)

注意:元数据是 Angular 以及 Nestjs 依赖注入实现的基础,请务必看完本章节。 因为Decorators是实验性特性,所以如果想要支持装饰器功能,需要在tsconfig.json中添加以下配置。

  1. {
  2. "compilerOptions": {
  3. "experimentalDecorators": true,
  4. "emitDecoratorMetadata": true
  5. }
  6. }

使用元数据需要安装并引入reflect-metadata这个库。这样在编译后的 js 文件中,就可以通过元数据获取类型信息。

  1. // 引入reflect-metadata
  2. import 'reflect-metadata';

你们应该会比较好奇,运行时JS是如何获取类型信息的呢?请紧张地继续往下看:
引入了reflect-metadata后,我们就可以使用其封装在Reflect上的相关接口,具体请查看其文档。然后在装饰器函数中可以通过下列三种metadataKey获取类型信息。

  • design:type: 属性类型
  • design:paramtypes: 参数类型
  • design:returntype: 返回值类型

https://github.com/rbuckton/reflect-metadata