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

向Redux Toolkit Query函数传参时出现类型不匹配问题

解决Redux Toolkit RTK Query传递字符串参数的TypeScript错误

问题出在你定义builder.query时的泛型参数上——第二个泛型参数指定了query接收的参数类型,你写的是void,意味着这个query不接受任何参数,所以后续传参和修改query参数类型都会引发类型不兼容错误。

正确修改方式

把builder.query<FooResponse, void>的第二个泛型参数从void改为string,这样TypeScript就会自动识别query函数的参数类型为字符串:

foo: builder.query<FooResponse, string>({
  query: (bar) => ({ 
    url: SOME_URL_CONSTANT,
    params: { bar }
  }),
  transformResponse(response: FooResponse[]): FooResponse {
    return response[0];
  }
}),

错误原因解析

  • 初始代码中泛型第二个参数设为void,TypeScript强制query函数只能接收void类型参数,因此调用useFooQuery("whatever")时,字符串参数与void类型不匹配,触发报错。
  • 后续手动给query参数指定string类型,但泛型仍为void,导致query函数参数类型和泛型定义的QueryArg类型冲突,引发第二个错误。

多参数场景扩展

如果需要传递多个参数,可以定义接口或类型别名统一管理参数类型:

interface FooQueryParams {
  bar: string;
  baz: number;
}

foo: builder.query<FooResponse, FooQueryParams>({
  query: ({ bar, baz }) => ({
    url: SOME_URL_CONSTANT,
    params: { bar, baz }
  }),
  // 其他配置项
}),

调用时传入符合类型的对象即可:useFooQuery({ bar: "whatever", baz: 123 })

内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:43:23