TS 元数据
TS 元数据
在使用元数据前,首先需要在 tsconfig.json
中启用。
{
"compilerOptions": {
// 支持装饰器
"experimentalDecorators": true,
// 装饰器元数据
"emitDecoratorMetadata": true
}
}
接着需要安装 reflect-metadata
库。
在入口文件引入。
// main.ts
import 'reflect-metadata'
// ...
获取元数据
TS 为使用了装饰器的代码注入了三组元数据。
design:paramtypes
获取函数参数类型。design:returntype
获取函数返回类型。design:type
获取类型。
const Injectable: ClassDecorator = target => {}
const Shared: PropertyDecorator = target => {}
const NotShared: MethodDecorator = target => {}
const Parse: ParameterDecorator = target => {}
@Injectable
class Example {
@Shared
name: string = ''
@NotShared
method (@Parse p: number): boolean {
return false
}
}
Reflect.getMetadata('design:paramtypes', Example.prototype, 'method')
// [ [Function: Number] ]
Reflect.getMetadata('design:type', Example.prototype, 'method')
// [Function: Function]
Reflect.getMetadata('design:returntype', Example.prototype, 'method')
// [Function: Boolean]
Reflect.getMetadata('design:paramtypes', Example.prototype, 'name')
// undefined
Reflect.getMetadata('design:returntype', Example.prototype, 'name')
// undefined
Reflect.getMetadata('design:type', Example.prototype, 'name')
// [Function: String]
设置元数据
Reflect.defineMetadata('public', true, Example)
Reflect.getMetadata('public', Example) // true
TS 元数据
http://localhost:8080/archives/f72474f6-2b1a-4c23-891b-bbe983a9bef3