UNPKG

@zenweb/form

Version:

Zenweb Form module

75 lines (74 loc) 2.13 kB
import { Field } from '../field.js'; import { TypeKeys } from 'typecasts'; export type ChoiceValueType = number | string; export interface ChoiceType { /** * 显示名 */ label: string; /** * 值 */ value: ChoiceValueType; /** * 禁止选择 */ disabled?: boolean; } declare class BaseSelect<T extends TypeKeys> extends Field<T> { protected _choices: ChoiceType[]; /** * 设置选择项 */ choices(choices: (ChoiceValueType | ChoiceType)[]): this; /** * 设置选择项,使用指定的 value 和 label */ choicesMap(choices: any[], valueKey: string, labelKey: string): this; /** * 设置选项,使用对象的 key 和 value */ choicesObject(obj: object): this; /** * 使用 ts 的 enum 类型作为选择项 */ choicesEnum<T extends Record<Extract<keyof T, string>, ChoiceValueType>>(enumObj: T): this; /** * 是否没有设置选择项 */ isEmpty(): boolean; /** * 检查选择项是否已经设置 */ assertEmpty(): void; extra(): { choices: ChoiceType[]; }; } export declare class Select<T extends TypeKeys> extends BaseSelect<T> { clean(data: any): any; } export declare class Radio<T extends TypeKeys> extends Select<T> { } export declare class Multiple<T extends TypeKeys> extends BaseSelect<T> { protected _max?: number; protected _min?: number; /** 最多可以选择数量 */ max(v: number): this; /** 最少选择数量 */ min(v: number): this; extra(): { choices: ChoiceType[]; } & { max: number | undefined; min: number | undefined; }; clean(data: any): any; } export declare class Checkbox<T extends TypeKeys> extends Multiple<T> { } export declare const select: <T extends TypeKeys>(valueType: T) => Select<T>; export declare const radio: <T extends TypeKeys>(valueType: T) => Radio<T>; export declare const multiple: <T extends TypeKeys>(valueType: T) => Multiple<T>; export declare const checkbox: <T extends TypeKeys>(valueType: T) => Checkbox<T>; export {};