向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
相关产品推荐
相关产品推荐

