函数: 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 |
参数
| 参数 | 类型 | 描述 |
|---|---|---|
str | string | query 串或完整 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> |
参数
| 参数 | 类型 | 描述 |
|---|---|---|
str | string | query 串或完整 URL(自动截取 ? 之后、# 之前的部分) |
schema | S | 键 → 转换器映射(每项为 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[]