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

Redux Toolkit RTK Query无参数查询端点定义及TS调用报错解决

RTK Query 无参数查询端点正确定义方案

问题原因

RTK Query 的 builder.query 泛型默认要求显式声明入参类型,如果你的查询不需要传参数,没有指定入参类型为void的情况下,TS 会默认要求调用时传入参数,触发类型报错。

解决方法

给builder.query的第二个泛型参数传入void声明该查询无入参即可,若需要更好的类型提示,建议同时声明接口返回值的类型:

// 先定义宝可梦列表接口的返回值类型
interface PokemonListResponse {
  count: number
  next: string | null
  previous: string | null
  results: { name: string; url: string }[]
}

export const pokemonApi = createApi({
  reducerPath: "pokemonApi",
  baseQuery: fetchBaseQuery({ baseUrl: "https://pokeapi.co/api/v2/" }),
  tagTypes: [],
  endpoints: (builder) => ({
    getPokemonByName: builder.query({
      query: (name: string) => `pokemon/${name}`
    }),
    // 修改后的无参查询定义
    getAllPokemon: builder.query<PokemonListResponse, void>({
      query: () => `pokemon/`
    })
  })
});

修改完成后,组件中直接调用useGetAllPokemonQuery()就不会出现要求传参的报错,同时返回的data也会有对应的类型提示。

文档中 useGetPostsQuery 对应的端点定义参考

你提到的官方文档中未给出的useGetPostsQuery对应的端点定义遵循同样规则:

// 定义返回的Post类型
interface Post {
  id: number
  title: string
  content: string
  // 其他字段
}

// 端点定义
endpoints: (builder) => ({
  getPosts: builder.query<Post[], void>({
    query: () => '/posts'
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:39:02