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

如何为RTK Query的UseLazyQuery触发函数trigger添加正确的类型注解?

如何为RTK Query的UseLazyQuery触发函数trigger添加正确的类型注解?

嘿,我刚好也碰到过这个困扰!其实RTK Query已经帮我们内置了对应的类型,完全不用靠any来混过去,这里有几种简单的解决方案:

方法一:直接提取父组件中trigger的类型

如果你的子组件和父组件在同一个文件,或者可以轻松共享类型的话,直接用typeof来提取trigger的类型就好:

// 父组件代码
const [trigger] = useLazyGetQuery();
// 提取trigger的类型
type LazyQueryTrigger = typeof trigger;

// 子组件中使用这个类型
export const ChildComponent = ({ trigger }: { trigger: LazyQueryTrigger }) => {
  // 现在trigger会有完整的类型提示啦
};

方法二:从生成的API中直接获取触发函数类型

如果你是用createApi生成的API切片,每个endpoint都对应了一个initiate方法,它的类型和useLazyQuery返回的触发函数完全一致。假设你的API切片是这样的:

// api.ts
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const api = createApi({
  reducerPath: 'myApi',
  baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
  endpoints: (builder) => ({
    getQuery: builder.query({
      query: (id: number) => `/data/${id}`,
    }),
  }),
});

// 导出lazy query hook
export const { useLazyGetQuery } = api;

那你可以直接从endpoint的initiate方法提取类型:

// 在子组件或者类型文件中
import { api } from './api';

type GetQueryTrigger = typeof api.endpoints.getQuery.initiate;

export const ChildComponent = ({ trigger }: { trigger: GetQueryTrigger }) => {
  // 这里trigger会自动带上正确的参数、返回Promise类型的提示
};

为什么不推荐用any?

用any会完全丢失TypeScript的类型检查优势:比如你调用trigger时传错参数类型、或者处理返回的Promise时搞错结构,TS都没法帮你提前发现问题。而用正确的类型注解后,编辑器会给你完整的代码提示,还能在编译阶段就拦截错误~

备注:内容来源于stack exchange,提问作者Kostya GL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:42:36