import { ArrayType } from './ArrayType'; import { BooleanType } from './BooleanType'; import { DateType } from './DateType'; import { NumberType } from './NumberType'; import { StringType } from './StringType'; import { ObjectType } from './ObjectType'; export type TypeName = 'array' | 'string' | 'boolean' | 'number' | 'object' | 'date'; export interface CheckResult { hasError?: boolean; errorMessage?: E | string; object?: { [P in keyof DataType]: CheckResult; }; array?: CheckResult[]; } export type ErrorMessageType = string; export type ValidCallbackType = (value: V, data?: D, fieldName?: string | string[]) => CheckResult | boolean; export type AsyncValidCallbackType = (value: V, data?: D, fieldName?: string | string[]) => CheckResult | boolean | Promise>; export type PlainObject = any> = { [P in keyof T]: T; }; export interface RuleType { onValid: AsyncValidCallbackType; errorMessage?: any; priority?: boolean; params?: any; isAsync?: boolean; } export type CheckType = X extends string ? StringType | DateType | NumberType : X extends number ? NumberType : X extends boolean ? BooleanType : X extends Date ? DateType : X extends Array ? ArrayType : X extends Record ? ObjectType : StringType | NumberType | BooleanType | ArrayType | DateType | ObjectType; export type SchemaDeclaration = { [P in keyof T]: CheckType; }; export type SchemaCheckResult = { [P in keyof T]?: CheckResult; };