import { ClassConstructor } from 'class-transformer' import 'reflect-metadata' export interface Validator { (value: any, obj: any): Promise } const VALIDATOR_KEY = Symbol('VALIDATOR') export function getFieldValidators>( cls: T, propertyKey: keyof InstanceType ): Validator[] { return Reflect.getMetadata(VALIDATOR_KEY, cls, propertyKey as string) || [] } export default function (...params: Validator[]) { return function (prototype: Object, propertyKey: string | symbol) { Reflect.defineMetadata(VALIDATOR_KEY, params, prototype.constructor, propertyKey) } }