import { IDtoType } from "../meta/lib/dtoExtractMeta.js"; /** Dto 定义的实际数据 */ export interface IDtoDefine { __isDto__: true; type: IDtoType; meta?: IDtoMeta; isOptional?: boolean; isNullable?: boolean; IsOr?: boolean; list?: IDtoDefine[]; nest?: any; } export type IDtoMeta = { is?: ((value: any) => { isOk: boolean; msg?: string; }) | ((value: any) => { isOk: boolean; msg?: string; })[]; } & TMore & Record; export interface IDtoVerifyResult { isOk: boolean; msg?: string; } export type IDtoVerify = (val: any, dto: IDtoDefine, meta?: IDtoMeta) => IDtoVerifyResult; export type IDtoFuncBase = (meta?: IDtoMeta) => TShow; /** 展平交叉类型,提高类型可读性 */ type Prettify = { [K in keyof T]: T[K]; } & {}; /** 检测类型是否包含 undefined 或 null(可选类型) */ type IsOptionalType = undefined extends T ? true : null extends T ? true : false; /** 从 DTO 定义中提取可选字段的键(类型包含 undefined 或 null) */ type OptionalKeys = { [K in keyof T]: IsOptionalType extends true ? K : never; }[keyof T]; /** 从 DTO 定义中提取必需字段的键 */ type RequiredKeys = { [K in keyof T]: IsOptionalType extends true ? never : K; }[keyof T]; /** * 从 DTO 对象定义推断出实际的 TypeScript 类型 * - 类型包含 undefined 或 null 的字段会变成可选字段 (?) */ export type InferDtoObject> = Prettify<{ [K in RequiredKeys]: T[K]; } & { [K in OptionalKeys]?: T[K]; }>; export type IDtoFuncArray = { ({}: {}, meta: IDtoMeta): any[]; (dtoTypes: T, meta?: IDtoMeta): T; >(dtoTypes: T, meta?: IDtoMeta): InferDtoObject[]; (dtoTypes: T, meta?: IDtoMeta): T[]; }; export type IDtoFuncObject = >(nest?: T, meta?: IDtoMeta) => InferDtoObject; export {}; //# sourceMappingURL=types.d.ts.map