shineout
Version:
Shein 前端组件库
134 lines (133 loc) • 4.17 kB
TypeScript
import { ValueOf } from '../@types/common';
export declare type RuleTypeEnum = 'email' | 'integer' | 'number' | 'url' | 'json' | 'hex' | 'rgb' | 'ipv4';
export declare type MessageType = string | ((props: any) => string);
export interface Required {
required?: boolean;
message?: MessageType;
}
export interface Max {
max?: number;
message?: MessageType;
}
export interface Min {
min?: number;
message?: MessageType;
}
export interface Range extends Min, Max {
}
export interface Type {
type?: RuleTypeEnum;
message?: MessageType;
}
export interface RegExpParams {
regExp?: RegExp | string;
message?: MessageType;
}
export interface ValidFunc {
(value: any, formData: any, callback: (cbArgs: (true | Error) | (true | Error)[]) => void, props: any): void | Promise<any>;
}
export interface RuleCommonResult {
/**
* @en whether to be required
* @cn 是否必填
*/
required: InnerRuleFunc<(message?: MessageType) => Required>;
/**
* @en The minimum value. When type is 'number', validate the value. Otherwise, validate the value.length.
* @cn 最小值,type 为 'number' 时,判断数值大小,其他类型判断 length
*/
min: InnerRuleFunc<(number?: number, message?: MessageType) => Min>;
/**
* @en The maximum value. When type is 'number', validate the value. Otherwise, validate the value.length.
* @cn 最大值,type 为 'number' 时,判断数值大小,其他类型判断 length
*/
max: InnerRuleFunc<(number?: number, message?: MessageType) => Max>;
/**
* @en Range check, automatically determines whether the check type is a string, number, or option base on the field type.
* @cn 数值范围校验,会根据 Field 的 type 自动判断校验类型为字符串、数字或选项
*/
range: InnerRuleFunc<(min?: number, max?: number, message?: MessageType) => Range>;
/**
* @en regular expression
* @cn 正则表达式
*/
regExp: InnerRuleFunc<(reg?: RegExp | string, message?: MessageType) => RegExpParams>;
/**
* @en Email check
* @cn 邮箱校验
*/
email: InnerRuleFunc<(message?: MessageType) => Type>;
/**
* @en Integer check
* @cn 整数校验
*/
integer: InnerRuleFunc<(message?: MessageType) => Type>;
/**
* @en Number check
* @cn 数值校验
*/
number: InnerRuleFunc<(message?: MessageType) => Type>;
/**
* @en Url check
* @cn Url 校验
*/
url: InnerRuleFunc<(message?: MessageType) => Type>;
/**
* @en Json check
* @cn Json 校验
*/
json: InnerRuleFunc<(message?: MessageType) => Type>;
/**
* @en Hex check
* @cn Hex 校验
*/
hex: InnerRuleFunc<(message?: MessageType) => Type>;
/**
* @en Rgb check
* @cn Rgb 校验
*/
rgb: InnerRuleFunc<(message?: MessageType) => Type>;
/**
* @en Ipv4 check
* @cn Ipv4 校验
*/
ipv4: InnerRuleFunc<(message?: MessageType) => Type>;
}
export interface RuleFuncResult {
<U>(args?: U): {
args: U;
func: ValidFunc;
message?: MessageType;
};
isInnerValidator: true;
}
export declare type RuleResult = ({
[key: string]: RuleFuncResult;
}) | RuleCommonResult;
export declare type RuleResultValue = ValueOf<RuleResult>;
export declare type FormItemObjectRule = Type & RegExpParams & Range & Min & Max & Required & {
func?: ValidFunc;
};
export declare type FormItemRule<Value, FormData = any, Props = any> = Array<RuleResultValue | FormItemObjectRule | ((value: Value, formData: FormData, callback: ((cbArgs: boolean | Error) => void), props?: Props) => void)>;
export interface RuleParams {
required?: Required;
min?: Min;
max?: Max;
range?: Range;
regExp?: RegExpParams;
email?: Type;
integer?: Type;
number?: Type;
url?: Type;
json?: Type;
hex?: Type;
rgb?: Type;
ipv4?: Type;
[propName: string]: {
func?: ValidFunc;
message?: MessageType;
} | ValidFunc | undefined;
}
export declare type InnerRuleFunc<U> = U & {
isInnerValidator: true;
};