import { I18nMessage } from '../i18n'; interface Document { name?: string; description?: string; } export interface ValidatorOptions extends Document { defaultValue?: Type; required: IsRequired; } export declare type ValidatorType = T extends Validator ? NonNullable | (Options['required'] extends true ? NonNullable : undefined) : never; export declare abstract class Validator = ValidatorOptions> { protected readonly config: T; constructor(); optional(): any; protected default(value: any): any; docs(docs: Document): this; protected validate(i18n: I18nMessage, obj: Record, key: string, superKeys?: string[]): string | void; protected getLabel(key: string, superKeys: string[]): string; protected isEmpty(value: any): boolean; protected abstract validateValue(i18n: I18nMessage, data: Record, key: string, superKeys: string[]): string | void; protected toJSON(): { name: string; description: string; defaultValue: any; required: boolean; }; } export {};