Relfect Metadata,简单来说,你可以通过装饰器来给类添加一些自定义的信息。然后通过反射将这些信息提取出来。当然你也可以通过反射来添加这些信息。 就像是下面这个例子所示。
import 'reflect-metadata';
@Reflect.metadata('name', 'A')
class A {
@Reflect.metadata('hello', 'world')
public hello(): string {
return 'hello world'
}
}
Reflect.getMetadata('name', A) // 'A'
Reflect.getMetadata('hello', new A(),'hello') // 'world'
// 这里为什么要用 new A(),用 A 不行么?后文会讲到
metadata
默认的元数据装饰器可以被用于类, 类成员以及参数
参数
- metadataKey 元数据入口的key
- metadataValue 元数据入口的value ```typescript import ‘reflect-metadata’; const nameSymbol = Symbol(‘lorry’); // 类元数据 @Reflect.metadata(‘class’, ‘class’) class MetaDataClass { // 实例属性元数据 @Reflect.metadata(nameSymbol, ‘nihao’) public name = ‘origin’; // 实例方法元数据 @Reflect.metadata(‘getName’, ‘getName—->123’) public getName() {} // 静态方法元数据 @Reflect.metadata(‘static’, ‘static’) static staticMethod() {} } const value = Reflect.getMetadata(‘class’, MetaDataClass); const name = Reflect.getMetadata(nameSymbol, new MetaDataClass(), ‘name’); const methodVal = Reflect.getMetadata( ‘getName’, new MetaDataClass(), ‘getName’ ); const staticVal = Reflect.getMetadata(‘static’, MetaDataClass, ‘staticMethod’); console.log(value, name, methodVal, staticVal);
```