ts-api-core
Version:
Nodejs api framework core
153 lines (152 loc) • 7.26 kB
TypeScript
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;
}