redux 如何获取SQL查询定义的ReturnType

ep6jt1vc  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(70)

我正在尝试为RTKQ查询创建一个通用的TypeScript Package 器。我坚持的最后一个目标是获取通用甚至特定查询的返回类型。下面我将包括我的测试中的一些主要代码行,但here is a code sandbox显示了我的完整代码。

type EndpointKey = keyof typeof api.endpoints;
type Endpoint<EndpointName extends EndpointKey> = typeof injectedAPI.endpoints[EndpointName];
type ReturnQuery<E extends EndpointKey> = Endpoint<E>["useQuery"];

// Type is Record<string, any> & UseQuerySubscriptionResult<> - where is the UseQueryStateResult<> at? Might not be relevant but seems suspicious.
type PuppiesQueryReturnType = ReturnType<ReturnQuery<"getPuppies">>;

const queryReturn: PuppiesQueryReturnType = {} as PuppiesQueryReturnType;
const { data, foo, refetch, isLoading, error } = queryReturn; // All values have type any except for refetch

我不确定这是否是RTKQ类型中的一个潜在错误,或者是否有一些步骤我遗漏或做得不正确。
注意:并不是所有这些都是我的原始代码。其中大部分是从互联网上的各种帖子中复制的。

y3bcpkx1

y3bcpkx11#

看起来我的问题的答案是@reduxjs/toolkit/dist/query/react/buildHooks的类型TypedUseQueryHookResult。我找不到一个参考它在文档中,但如果有人有链接,请评论,我会更新。
用这个我可以做一些事情,

type QueryResultInfered<E extends EndpointKey> = Endpoint<E> extends ApiEndpointQuery<
  QueryDefinition<infer QueryArgs, infer BaseQuery, any, infer ResultType>,
  any
>
  ? TypedUseQueryHookResult<ResultType, QueryArgs, BaseQuery>
  : never;

可能有一个更简单的方法来做这件事,而不需要推理,但这会起作用。
感谢acemarke对Reactiflux Discord的帮助!

相关问题