UNPKG

ts-api-core

Version:

Nodejs api framework core

153 lines (152 loc) 7.26 kB
import { ClassType } from "../base/type"; export declare type ModelHelperInitObjectCacheType = [ Map<string, SrcParams> | undefined, Record<string, any>, string[] | undefined ]; /** * 数据模型转化 * @author yangyxd 2021.03.16 */ export declare class ModelHelper { static _maps: Map<string, Map<string, SrcParams>>; static _initedClassMap: Record<string, boolean>; /** * 将输入的一个any对象转化为指定的对象 * @param data 输入对象 * @param ouputClass 要输入的类型 * @param skeepNull 跳过空字段(输入数据为空时,保留现在数据) * @param mergeAllField 合并所有字段 * @param convSubFieldName 是否转变子对象的名称 * @returns */ static toModel<T>(data: any | undefined, ouputClass: ClassType<T>, skeepNull?: boolean, mergeAllField?: boolean, convSubFieldName?: boolean): T; /** * 将输入的一个any对象数组转化为指定的对象数组 * @param data 输入对象 * @param ouputClass 要输入的类型 * @param convert 转换器 * @param skeepNull 跳过空字段(输入数据为空时,保留现在数据) * @param mergeAllField 合并所有字段 * @param convSubFieldName 是否转变子对象的名称 * @returns */ static toArrayModel<T>(data: any[] | undefined, ouputClass: ClassType<T>, convert?: SrcConverterBase, skeepNull?: boolean, mergeAllField?: boolean, convSubFieldName?: boolean): T[]; /** * 从源数据中初始化数据,对两者进行合并,现有数据优先 * @param sourceData 源数据 * @param data 要初始化的数据 * @param mergeAllField 是否合并来源数据的所有字段,包括在T中不存在的字段 * @param convSubFieldName 是否转变子对象的字段名称 * @param convFieldName 是否转换字段名称 */ static initModel<T>(sourceData: any | undefined, data: T, mergeAllField?: boolean, convSubFieldName?: boolean, convFieldName?: boolean, cacheInfo?: ModelHelperInitObjectCacheType, doInitCacheInfo?: (keys: string[]) => ModelHelperInitObjectCacheType): void; /** * 合并所有字段 * @param sourceData 源数据 * @param data 输出数据 * @param keys 字段列表 * @param convFieldName 是否转换字段名称(坨峰转换),默认 `true` */ static mergeAllFields(sourceData: any | undefined, data: any, keys: string[], convFieldName?: boolean): void; static initObjectRegKeys(_regKeys: Map<string, SrcParams> | undefined, result: any | Record<string, any>, keys: string[], skeepNull?: boolean): void; static initObjectCacheInfo(result: any | Record<string, any>, item: any | Record<string, any>, keys: string[], useKeys?: boolean): ModelHelperInitObjectCacheType; private static initObject; private static convObjectFieldName; private static getChildrenValue; static getClassParams(className: string, fieldName: string): SrcParams | undefined; /** 获取对象的所有 keys ,包括 src 注解部分 */ static getObjectKeys(obj: any | Record<string, any>): string[]; static getClassMap(className: string, object?: any | undefined): Map<string, SrcParams> | undefined; /** 将有 @src 装饰器的字段合并 */ static mergeClassMapField(className: string, doSetValue?: (srcKey: string, destKey: string, src: SrcParams) => void): void; } export declare class SrcParams { /** 字段名称 */ name: string; /** 属性名称 */ propertyName: string; /** 是否为数组 */ array: boolean; /** 构造器 */ classType?: ClassType<any>; /** 转换器 */ convert?: SrcConverterBase; /** 执行转换器,如果返回 undefined ,则会忽略字段, 不进行处理 */ executeConvert(owner: any | undefined, value: any | undefined): any | undefined; } /** * src 注解,用于标识来源数据的信息 * @param name 源数据中的字段名称, 为空则使用本地字段名 * @param classType 目标对象类型(如果转换后需要是个对象时使用) * @param array 是否是数组 * @param convert 转换器类型 * @param ...args 转换器参数, 不同的转换器,参数不同 * @returns */ export declare function src(name?: string | undefined, classType?: ClassType<any>, array?: boolean, convert?: ClassType<SrcConverterBase>, ...args: any | undefined): any; /** 来源数据转换器基类 */ export declare abstract class SrcConverterBase { data: any; /** 如果返回 undefined 则忽略此数据 */ abstract execute(value: any | undefined): any | undefined; } /** 直接排除掉某个字段的转换器 */ export declare class ExcludeFieldSrcConverter extends SrcConverterBase { execute(v: any | undefined): any | undefined; } /** 数据筛选转换器, 来源数据指定字段的值与参数值一致时返回来源值,否则返回 undefined */ export declare class EqualValueFilterSrcConverter extends SrcConverterBase { field: string; value: any; /** 数据筛选转换器, 来源数据指定字段的值与参数值一致时返回来源值,否则返回 undefined */ constructor(field: string, value: any | undefined); execute(v: any | undefined): any | undefined; } /** 布尔值转换器 */ export declare class BoolValueSrcConverter extends SrcConverterBase { /** 条件为true时的值或值列表 */ trueValue: any; constructor(trueValue?: any | undefined); execute(v: any | undefined): any | undefined; } /** 布尔值计算转换器 */ export declare class BoolCalcSrcConverter extends SrcConverterBase { calcCallBack?: (v: any) => boolean; constructor(calcCallBack?: (v: any | undefined) => boolean); execute(v: any | undefined): any | undefined; } /** 数值型转换器 */ export declare class IntSrcConverter extends SrcConverterBase { calcCallBack?: (v: any) => number; constructor(calcCallBack?: (v: any) => number); execute(v: any | undefined): any | undefined; } /** 日期型转换器 */ export declare class DateSrcConverter extends SrcConverterBase { execute(v: any | undefined): any | undefined; } /** JSON字符串转对象 - 转换器 */ export declare class JsonObjectSrcConverter extends SrcConverterBase { convSubFieldName: boolean; /** * @param convSubFieldName 是否转变子对象的字段名称 */ constructor(convSubFieldName?: boolean); execute(v: any | undefined): any | undefined; } /** * 子对象转换至父级 - 转换器 * 注意: * 如果目标是数组,则会将数组内容设置到装饰器的字段中 * 如果目标是对象,则会将对象的内容设置到装饰器所在的类中,而不改变装饰器所有字段本身 */ export declare class SubObjectConverter extends SrcConverterBase { convSubFieldName: boolean; convFieldName?: boolean; /** * @param convSubFieldName 是否转变子对象的字段名称 */ constructor(convSubFieldName?: boolean, convFieldName?: boolean); execute(v: any | undefined): any | undefined; }