@zenweb/form
Version:
Zenweb Form module
104 lines (103 loc) • 2.68 kB
TypeScript
import { MessageCodeResolver } from '@zenweb/messagecode';
import { ErrorMessages, FormData, FormLayout, FormResult, FormFields, FieldsResult, GetFieldType } from './types.js';
export interface Form {
/**
* 总体数据验证清理
* - 在所有字段验证通过后调用
* - 如果验证不通过需要抛出异常可以使用 `this.fail('code')`
* - 使用 `this.data` 访问或改变数据
*/
clean?(): void | Promise<void>;
}
export declare class Form<T extends FormData = FormData> {
protected messageCodeResolver: MessageCodeResolver;
/**
* 初始化完成的字段
*/
protected _fields: FormFields;
/**
* 布局结果
*/
private _layout?;
/**
* 字段结果
*/
private _fieldsResult?;
/**
* 表单数据
*/
protected _data?: T;
/**
* 表单校验错误信息
*/
errors: {
[]: any;
};
/**
* 是否有校验错误
*/
get hasErrors(): boolean;
/**
* 已格式化错误消息
*/
private _errorMessages?;
/**
* 重置表单
* - 清除已处理数据
* - 清除已处理字段
* - 清除已处理布局
* - 清除错误消息
*/
reset(): void;
/**
* 取得表单提交结果
*/
get data(): Partial<T> | null | undefined;
/**
* 设置表单提交结果或初始值
*/
set data(data: Partial<T> | null | undefined);
/**
* 输出字段
*/
get fields(): FieldsResult;
/**
* 表单布局,如果不设置或者缺少字段,则自动按顺序追加到结尾
*/
get layout(): FormLayout[];
/**
* 输出表单给前端
*/
toJSON(): FormResult;
/**
* 验证输入数据
* @param input 输入数据
* @returns 是否有错误
*/
validate(input: any): Promise<boolean>;
/**
* 检查输入数据,如果有误直接抛出异常
*/
assert(input: any): Promise<void>;
/**
* 验证失败 - 抛出异常
*/
fail(code: string, params?: any): void;
/**
* 错误消息
* - 当发生错误时 key 对应字段名称
*/
get errorMessages(): ErrorMessages;
}
export declare abstract class FormBase extends Form {
/**
* 安装初始化
*/
abstract setup(): {} | Promise<{}>;
get data(): {
[]>>]: GetFieldType<Awaited<ReturnType<this['setup']>>[K]>;
};
set data(data: Partial<{
[K in keyof Awaited<ReturnType<this['setup']>>]: GetFieldType<Awaited<ReturnType<this['setup']>>[K]>;
}> | null | undefined);
}