Skip to content

函数: parseQuery()

调用签名

ts
function parseQuery<T>(str): T;

定义于: url.ts:74

解析 query 字符串为对象(自动 decode,重复键合并为数组,与 stringifyQuery 对称)

类型参数

类型参数默认类型描述
T extends Record<string, any>Record<string, string | string[]>期望的返回结构,默认 `Record<string, string

参数

参数类型描述
strstringquery 串或完整 URL(自动截取 ? 之后、# 之前的部分)

返回值

T

键值对象;同名键出现多次时值为字符串数组

示例

ts
parseQuery('?a=1&b=hello%20world')       // { a: '1', b: 'hello world' }
parseQuery('id=1&id=2')                  // { id: ['1', '2'] }
parseQuery<{ id: string }>('?id=2').id   // 类型为 string(运行时仍是字符串 '2')

调用签名

ts
function parseQuery<S>(str, schema): ParsedQuery<S>;

定义于: url.ts:100

解析 query 字符串并按 schema 转换值,返回类型精确等于 schema 声明的形状

类型参数

类型参数
S extends Record<string, QuerySchemaEntry>

参数

参数类型描述
strstringquery 串或完整 URL(自动截取 ? 之后、# 之前的部分)
schemaS键 → 转换器映射(每项为 QuerySchemaEntry):标量转换器(Number 等)取单值转换;[转换器](如 [String])强制该键为数组

返回值

ParsedQuery<S>

对象,各键类型由 schema 推导(未在 schema 声明的键不会出现在类型中,但仍存在于运行时值上)

备注

⚠️ 布尔值易踩坑:JS 内置 Boolean('false') === true(非空字符串一律为 true),直接用会把 ?a=false 解析成 true。 为规避这个常见错误,schema 里写 Boolean 时 parseQuery 会自动改用安全的 toBool (仅 '1' | 'true' | 'yes' | 'on' 视为 true)。也可显式写 toBool,或自定义如 v => v === '1'

示例

ts
const q = parseQuery('?id=2&ok=1&a=false&b=hi&tag=x&tag=y', {
  id: Number,
  ok: [String],
  a: Boolean,
  b: String,
  tag: [String],
})
q.id  // number
q.ok  // string[]
q.a   // boolean('false' 正确解析为 false,得益于对 Boolean 的特殊处理)
q.b   // string
q.tag // string[]