Skip to content

qs

查询字符串解析与序列化工具。

导入

typescript
import { qsParse, qsStringify } from '@cloudcome/utils-core/qs';
import type { QSReader, QSWriter } from '@cloudcome/utils-core/qs';

类型定义

QSReader<T>

typescript
type QSReader<T extends AnyObject> = (value: string, key: string, qsObject: T) => unknown;

QSWriter<T>

typescript
type QSWriter<T extends AnyObject = AnyObject> = (value: unknown, key: string, query: T) => string | null;

函数

qsParse

解析查询字符串为对象。

typescript
function qsParse<T extends AnyObject>(queryString: string, parser?: QSReader<T>): T;

参数

参数类型描述
queryStringstring查询字符串(可以包含或不包含前导 ?
parserQSReader<T>可选,自定义解析函数

返回值

T - 解析后的对象

示例

typescript
// 基本用法
qsParse('key=value&foo=bar'); // { key: 'value', foo: 'bar' }
qsParse('?key=value&foo=bar'); // { key: 'value', foo: 'bar' }

// 解析数组(重复键自动转为数组)
qsParse('ids=1&ids=2&ids=3'); // { ids: ['1', '2', '3'] }

// 自定义解析
qsParse('key=value', (value, key) => {
  return value.toUpperCase();
}); // { key: 'VALUE' }

qsStringify

将对象序列化为查询字符串。

typescript
function qsStringify<T extends AnyObject>(qsObject: T, stringify?: QSWriter<T>): string;

参数

参数类型描述
qsObjectT要序列化的对象
stringifyQSWriter<T>可选,自定义序列化函数

返回值

string - 序列化后的查询字符串

示例

typescript
// 基本用法
qsStringify({ key: 'value', foo: 'bar' }); // 'key=value&foo=bar'

// 序列化数组(重复键)
qsStringify({ ids: [1, 2, 3] }); // 'ids=1&ids=2&ids=3'

// 默认序列化类型:string、number、boolean、Date
qsStringify({ str: 'hello', num: 42, bool: true, date: new Date('2023-01-01') });
// 'str=hello&num=42&bool=true&date=2023-01-01T00:00:00.000Z'

// 自定义序列化
qsStringify({ key: 'value' }, (value, key) => {
  if (value === null) return null; // 跳过 null 值
  return String(value);
});

基于 MIT 许可发布