declare function getOwnReflectMetadata<TMetadata>(target: object, metadataKey: unknown): TMetadata | undefined;

declare function getReflectMetadata<TMetadata>(target: object, metadataKey: unknown): TMetadata | undefined;

declare function setReflectMetadata(target: object, metadataKey: unknown, metadata: unknown): void;

declare function updateOwnReflectMetadata<TMetadata>(target: object, metadataKey: unknown, buildDefaultValue: () => TMetadata, callback: (metadata: TMetadata) => TMetadata): void;

declare function updateReflectMetadata<TMetadata>(target: object, metadataKey: unknown, buildDefaultValue: () => TMetadata, callback: (metadata: TMetadata) => TMetadata): void;

export { getOwnReflectMetadata, getReflectMetadata, setReflectMetadata, updateOwnReflectMetadata, updateReflectMetadata };
