UNPKG

@cloudcome/utils-core

Version:
63 lines (62 loc) 2.4 kB
import { AnyObject } from './types'; /** * 查询字符串解析函数 * @template T - 解析后返回的对象类型 * @callback QSReader * @param {string} value - 查询字符串的值 * @param {string} key - 查询字符串的键 * @param {T} qsObject - 当前解析的对象 * @returns {unknown} 解析后的值,如果返回 undefined 或 null 则不会添加到对象中 * @example * const parser: QSReader<MyObject> = (value, key, obj) => { * if (key === 'date') return new Date(value); * return value; * }; */ export type QSReader<T extends AnyObject> = (value: string, key: string, qsObject: T) => unknown; /** * 解析查询字符串为对象 * @template T - 返回的对象类型 * @param {string} queryString - 要解析的查询字符串 * @param {QSReader<T>} [parser] - 自定义解析函数 * @returns {T} 解析后的对象 * @example * const obj = qsParse('name=John&age=30'); * // { name: 'John', age: '30' } * * const obj2 = qsParse('date=2023-01-01', (val, key) => { * if (key === 'date') return new Date(val); * return val; * }); * // { date: Date('2023-01-01') } */ export declare function qsParse<T extends AnyObject>(queryString: string, parser?: QSReader<T>): T; /** * 查询字符串序列化函数 * @template T - 要序列化的对象类型 * @callback QSWriter * @param {unknown} value - 要序列化的值 * @param {string} key - 对象的键 * @param {T} query - 当前序列化的对象 * @returns {string | null} 序列化后的字符串,如果返回 null 则忽略该键值对 * @example * const writer: QSWriter<MyObject> = (val, key) => { * if (val instanceof Date) return val.toISOString(); * return String(val); * }; */ export type QSWriter<T extends AnyObject = AnyObject> = (value: unknown, key: string, query: T) => string | null; /** * 将对象序列化为查询字符串 * @template T - 要序列化的对象类型 * @param {T} qsObject - 要序列化的对象 * @param {QSWriter<T>} [stringify=defaultWriter] - 自定义序列化函数 * @returns {string} 序列化后的查询字符串 * @example * const str = qsStringify({ name: 'John', age: 30 }); * // 'name=John&age=30' * * const str2 = qsStringify({ date: new Date('2023-01-01') }); * // 'date=2023-01-01T00:00:00.000Z' */ export declare function qsStringify<T extends AnyObject>(qsObject: T, stringify?: QSWriter<T>): string;