import { ConvertConfig, BooleanFields, ObjectFields, ArrayFields } from './types'; function convertBoolean(fields: BooleanFields, value: any, reverse: boolean) { let result: any = undefined; if (reverse) { fields.true !== undefined && value && (result = fields.true); fields.false !== undefined && !value && (result = fields.false); } else { fields.true !== undefined && fields.true === value && (result = true); fields.false !== undefined && fields.false === value && (result = false); } return result; } function convertObject(fields: ObjectFields, value: any, reverse: boolean) { let result: any = {}; reverse ? result = value : fields.keys && fields.keys.forEach(key => (result[key] = value[key])); return result; } function convertArray(fields: ArrayFields, value: any[], reverse: boolean) { let result: any[] = []; reverse ? result = value : fields.key && (result = value.map(v => v[fields.key])); return result; } /** 转换 值 为指定配置的值 * @reserve 设置为 true 则 将转换后的值 转为 原本的值 */ export function convert(config: ConvertConfig, value: any, reserve: boolean = false) { let result: any = undefined; if (config.convertFields.getConvert) { result = config.convertFields.getConvert(value, config.convertFields, reserve); } else { const convertFns = ({ object: convertObject, boolean: convertBoolean, array: convertArray } as any)[config.convertType]; convertFns && (result = convertFns(config.convertFields, value, reserve)); } return result; }