You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中URLSearchParams传字符串使用时触发ts(2769)报错

问题产生原因

报错和URLSearchParams构造函数接收字符串入参的能力无关,核心是当前TypeScript环境加载的URLSearchParams类型定义缺失迭代器相关声明,常见触发场景有两种:

  • URLSearchParams实例实现[Symbol.iterator]接口、可直接传入Object.fromEntries是ES2018标准纳入的特性。如果项目tsconfig.json中编译目标target低于ES2018,且没有手动在lib配置中引入ES2018及以上的标准库声明,TS会加载旧版本类型定义,也就是你查到的那份不包含迭代器实现的声明,自然会判定实例不满足Object.fromEntries的入参要求。
  • Node.js环境下,如果安装的@types/node版本过旧,也会出现类型定义不全的问题。
解决方法

根据项目兼容场景选择对应方案即可:

方案1:修正TS配置(推荐)

如果代码运行环境(Node.js 10+、所有现代浏览器)原生支持URLSearchParams的迭代特性,直接调整tsconfig.json的编译配置即可:

{
  "compilerOptions": {
    // 编译目标设为ES2018及以上,可选值:ES2019、ES2020、ESNext
    "target": "ES2020",
    // 若不想修改target,也可以手动在lib数组中追加高版本ES库,浏览器环境需追加DOM,Node环境搭配对应版本的@types/node使用
    "lib": ["ES2020", "DOM"]
  }
}

Node.js项目同步将本地的@types/node升级到和运行时Node版本匹配的新版本即可。

方案2:类型断言适配(无法修改全局配置时使用)

如果不方便调整全局TS配置,且确认运行环境支持迭代特性,可以直接用类型断言临时修正类型:

const sortString = req.query.sort as string
const params = Object.fromEntries(
  new URLSearchParams(sortString) as Iterable<[string, string]>
)

方案3:兼容写法(适配低版本运行环境)

如果需要兼容不支持URLSearchParams迭代器的老旧环境,可以不依赖迭代器能力,手动遍历生成对象,兼容性最好:

const sortString = req.query.sort as string
const searchParams = new URLSearchParams(sortString)
const params: Record<string, string> = {}
searchParams.forEach((value, key) => {
  params[key] = value
})

内容的提问来源于stack exchange,提问作者user11092881

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:24:34