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