element-plus-useform
Version:
element-plus useForm hook,使表单验证脱离组件实例
124 lines • 7.68 kB
TypeScript
import { type RuleItem, type ValidateError, type ValidateFieldsError } from 'async-validator';
import { type ComputedGetter, type ComputedRef, type Ref, type WritableComputedRef } from 'vue';
export type Arrayable<T> = T | T[];
export type UseFormPropertyKey = string | number;
export type UseFormItemPropertyKey = Arrayable<UseFormPropertyKey>;
export interface UseFormModel {
[K: UseFormPropertyKey]: any;
}
export type UseFormRuleItemTrigger = 'blur' | 'change';
export interface UseFormRuleItem extends RuleItem {
trigger?: Arrayable<UseFormRuleItemTrigger>;
}
export type UseFormRules<T extends UseFormModel = UseFormModel> = {
[K in keyof T]?: UseFormRuleItem | UseFormRuleItem[];
};
export interface UseFormOptions {
/**
* 开启 deep rule 监听
* @default false
* @see https://github.com/yiminghe/async-validator?tab=readme-ov-file#deep-rules
*/
deepRule?: boolean;
/**
* 严格模式。false: 键不存在时不进行验证;true: 键不存在时仍然进行验证
* @default false
*/
strick?: boolean;
/**
* @default false
*/
validateOnRuleChange?: boolean;
/**
* 深度克隆函数
* @default structuredClone
* @see https://developer.mozilla.org/zh-CN/docs/Web/API/structuredClone
*/
cloneDeep?: <T>(value: T) => T;
}
export type UseFormValidationResult = Promise<boolean>;
export type UseFormValidateCallback = (isValid: boolean, invalidFields?: ValidateFieldsError) => Promise<void> | void;
export interface UseFormValidateFailure {
errors: ValidateError[] | null;
fields: ValidateFieldsError;
}
export type UseFormValidateStatus = 'error' | 'validating' | 'success' | '';
export interface UseFormValidateInfo {
/**
* 必填项
*/
required?: boolean;
/**
* 验证状态
*/
validateStatus?: UseFormValidateStatus;
/**
* 错误信息
*/
error?: string;
}
export type UseFormValidateInfos<T extends UseFormModel = UseFormModel> = {
[key in keyof T]?: UseFormValidateInfo;
} & {
[key: UseFormPropertyKey]: UseFormValidateInfo;
};
export interface UseFormResult<T extends UseFormModel, M extends T | Ref<T>, R extends UseFormRules<T> | Ref<UseFormRules<T>> | ComputedRef<UseFormRules<T>> | WritableComputedRef<UseFormRules<T>> | (() => UseFormRules<T>)> {
model: M;
rules: R extends ComputedGetter<any> ? ComputedRef<UseFormRules<T>> : R;
initialModel: Ref<T>;
validateInfos: UseFormValidateInfos<T>;
/**
* 对整个表单的内容进行验证。 接收一个回调函数,或返回 Promise。
* @see https://element-plus.org/zh-CN/component/form.html#form-exposes
*/
validate(callback?: UseFormValidateCallback): UseFormValidationResult;
/**
* 验证具体的某个字段。
* @see https://element-plus.org/zh-CN/component/form.html#form-exposes
*/
validateField(props?: Arrayable<UseFormItemPropertyKey>, callback?: UseFormValidateCallback): Promise<any>;
/**
* 重置表单数据(与 element-plus 不一致)
* @param newModel 新的 model 数据,默认使用初始值
*/
resetFields(newModel?: Partial<T>): void;
/**
* 清除验证信息
* @param props 需要被清除的验证信息的 key,支持点语法和数组语法。不传入时清除所有验证信息。
* @see https://element-plus.org/zh-CN/component/form.html#form-exposes
*/
clearValidate(props?: Arrayable<UseFormItemPropertyKey>): void;
/**
* 清除深度验证信息及相关监听
* @param props 需要被清除的深度验证信息的 key,支持点语法和数组语法。不传入时清除所有深度验证信息及相关监听。
* @param strick true: 取值路径仅最后一级 key 不存在时也会被清除;false: 取值路径仅最后一级 key 不存在时不会被清除
*/
clearDeepInfos(props?: Arrayable<UseFormItemPropertyKey>, strick?: boolean): void;
}
interface GetResult {
value: any;
exist: boolean;
diff: number;
}
export declare function toArray<T>(value?: T | T[], clone?: boolean): T[];
export declare function normalizeKey(key: Arrayable<UseFormPropertyKey>, nkc: Record<string | number, string>): string;
export declare function get(obj: Record<string, any>, key: string): GetResult;
export declare function isRequired(rule: UseFormRuleItem | UseFormRuleItem[]): boolean;
export declare function isDeepRule(rule: UseFormRuleItem): boolean;
export declare function useForm<T extends UseFormModel, M extends T = T, R extends UseFormRules<T> = UseFormRules<T>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends T = T, R extends WritableComputedRef<UseFormRules<T>> = WritableComputedRef<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends T = T, R extends ComputedRef<UseFormRules<T>> = ComputedRef<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends T = T, R extends ComputedGetter<UseFormRules<T>> = ComputedGetter<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends T = T, R extends Ref<UseFormRules<T>> = Ref<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends UseFormRules<T> = UseFormRules<T>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends WritableComputedRef<UseFormRules<T>> = WritableComputedRef<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends ComputedRef<UseFormRules<T>> = ComputedRef<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends ComputedGetter<UseFormRules<T>> = ComputedGetter<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>, R extends Ref<UseFormRules<T>> = Ref<UseFormRules<T>>>(modelRef: M, rulesRef: R, options?: UseFormOptions): UseFormResult<T, M, R>;
export declare function useForm<T extends UseFormModel, M extends T = T>(modelRef: M, rulesRef?: null, options?: UseFormOptions): UseFormResult<T, M, Ref<UseFormRules<T>>>;
export declare function useForm<T extends UseFormModel, M extends Ref<T> = Ref<T>>(modelRef: M, rulesRef?: null, options?: UseFormOptions): UseFormResult<T, M, Ref<UseFormRules<T>>>;
export declare function useForm<T extends UseFormModel, R extends UseFormRules<T> = UseFormRules<T>>(modelRef: null | undefined, rulesRef: R, options?: UseFormOptions): UseFormResult<T, Ref<T>, R>;
export declare function useForm<T extends UseFormModel, R extends Ref<UseFormRules<T>> = Ref<UseFormRules<T>>>(modelRef: null | undefined, rulesRef: R, options?: UseFormOptions): UseFormResult<T, Ref<T>, R>;
export declare function useForm<T extends UseFormModel>(modelRef?: null, rulesRef?: null, options?: UseFormOptions): UseFormResult<T, Ref<T>, Ref<UseFormRules<T>>>;
export {};
//# sourceMappingURL=index.d.ts.map