4.1.0 • Published 4 years ago
@typemon/reflection v4.1.0
Reflection -
- Parameter metadata management
- Inheritance support
- Easy integration with decorators
Installation
$ npm install @typemon/reflection reflect-metadata
TypeScript
- Version
3.5 or later
is required. - Configure the decorator and metadata options.
{
"emitDecoratorMetadata": true,
"experimentalDecorators": true
}
Reflect Metadata
- Import only once at application entry point.
import 'reflect-metadata';
Usage
Reflection
Reflection.hasOwnMetadata(metadataKey, target, propertyKey?): boolean;
Reflection.hasNotOwnMetadata(metadataKey, target, propertyKey?): boolean;
Reflection.hasMetadata(metadataKey, target, propertyKey?): boolean;
Reflection.hasMetadata(metadataKey, target, propertyKey?): boolean;
Reflection.getOwnMetadata(metadataKey, target, propertyKey?): any;
Reflection.getMetadata(metadataKey, target, propertyKey?): any;
Reflection.setMetadata(metadataKey, metadataValue, target, propertyKey?): void;
Reflection.deleteMetadata(metadataKey, target, propertyKey?): void;
Reflection.decorate(decorators, {
target,
propertyKey?,
parameterIndex?
}): void;
Reflection.DefineMetadata(metadataKey, metadataValue): ClassDecorator & PropertyDecorator & MethodDecorator;
Metadata
Metadata.of({
target,
propertyKey?,
parameterIndex?
}): Metadata;
Metadata.hasOwn(metadataKey, {
target,
propertyKey?,
parameterIndex?
}): boolean;
Metadata.hasNotOwn(metadataKey, {
target,
propertyKey?,
parameterIndex?
}): boolean;
Metadata.has(metadataKey, {
target,
propertyKey?,
parameterIndex?
}): boolean;
Metadata.hasNot(metadataKey, {
target,
propertyKey?,
parameterIndex?
}): boolean;
Metadata.getOwn(metadataKey, {
target,
propertyKey?,
parameterIndex?
}): any;
Metadata.get(metadataKey, {
target,
propertyKey?,
parameterIndex?
}): any;
Metadata.set(metadataKey, metadataValue, {
target,
propertyKey?,
parameterIndex?
}): void;
Metadata.delete(metadataKey, {
target,
propertyKey?,
parameterIndex?
}): void;
Metadata Decorator
You can easily set metadata using the Metadata.Define
decorator.
@Metadata.Define(metadataKey, metadataValue)
class Target {
@Metadata.Define(metadataKey, metadataValue)
public static staticProperty: unknown;
@Metadata.Define(metadataKey, metadataValue)
public static staticMethod(
@Metadata.Define(metadataKey, metadataValue)
staticMethodParameter: unknown
): void { }
@Metadata.Define(metadataKey, metadataValue)
public instanceProperty: unknown;
public constructor(
@Metadata.Define(metadataKey, metadataValue)
constructorParameter: unknown
) { }
@Metadata.Define(metadataKey, metadataValue)
public instanceMethod(
@Metadata.Define(metadataKey, metadataValue)
instanceMethodParameter: unknown
): void { }
}
You can create and use custom decorators as needed.
function CustomDecorator(): Metadata.Decorator {
return Metadata.Decorator.create((metadata: Metadata): void => {
. . .
});
}