redux 定义从useQuery结果创建选择器类型

sbtkgmzw  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(113)

我尝试为createSelector res参数获取正确的类型,但似乎无法从redux-js中找到正确的类型,因为在TypeScript中没有关于此用法的示例或解释,只有在JS中。

const selectFacts = React.useMemo(() => {
    return createSelector(
        (res) => res.data,
        (data) => (data ? pick(data, facts_keys) : undefined)
    );
}, []);

const { facts } = useGetProfileQuery(user?.email ?? skipToken, {
    selectFromResult: (result) => ({
        ...result,
        facts: selectFacts(result),
    }),
});

从这里可以看出:https://redux.js.org/tutorials/essentials/part-8-rtk-query-advanced#selecting-values-from-results
没有例子显示如何在TypeScript中完成这一点,其他人已经面对过这个问题吗?
我最终结束了做类型Assert,这样我就不会被类型定义错误卡住了..但是这一点都不理想,所以任何替代方案都是受欢迎的。

gjmwrych

gjmwrych1#

你不需要像那样的“完整类型”,只需要指定你需要的。
您的选择器只访问data,而在应用中的另一个点上,您定义了该端点,因此您已经有了一个用于该端点的接口。
所以你可以

const selectFacts = React.useMemo(() => { 
  return createSelector(
    (res: { data: YourDataInterfaceOrType }) => res.data, 
    (data) => (data ? pick(data, facts_keys) : undefined) 
  ); 
}, []);

相关问题