TypeScript报错:'String'类型参数无法适配XMLHttpRequest.send()参数
TypeScript类型错误:String类型无法传递给XMLHttpRequest.send()参数
问题代码
const setParams =(d_:any)=>{ let p:String = '' for(let k in d_) p += k + '=' + d_[k] + '&' return p } const o = {data: {}} x.send(setParams(o.data))
报错信息
const setParams: (d_: any) => String
参数类型“String”无法赋值给类型“Document | XMLHttpRequestBodyInit | null | undefined”。
类型“String”缺少类型“URLSearchParams”中的以下属性:append、delete、get、getAll及其他7个属性
问题原因
- 误用了
String包装对象类型而非TS原生的string原始类型,XMLHttpRequest.send()不接受String对象作为参数; - 手动拼接的参数字符串末尾会多出
&,可能引发请求格式问题。
修复方案
方案1:改用string原始类型并优化拼接逻辑
把String改为string,同时避免末尾多余的&:
// 用Record<string, any>替代any,让类型更明确 const setParams = (d_: Record<string, any>) => { return Object.entries(d_).map(([key, value]) => `${key}=${value}`).join('&'); }; const o = { data: {} }; x.send(setParams(o.data));
方案2:使用URLSearchParams(更规范)
TS推荐用内置的URLSearchParams处理查询参数,自动适配send()的类型要求,还能避免手动拼接的编码/格式错误:
const setParams = (d_: Record<string, any>) => new URLSearchParams(d_); const o = { data: { id: 1, name: "demo" } }; x.send(setParams(o.data));
内容的提问来源于stack exchange,提问作者LittleZabi
相关产品推荐
相关产品推荐

