【问题标题】:TypeScript type for return of Reselect Redux function?用于返回 Reselect Redux 函数的 TypeScript 类型?
【发布时间】:2020-03-26 09:39:36
【问题描述】:

是否可以在 Redux 的 Reselect 中定义 createSelector 函数的返回类型?

我无法从官方文档中弄清楚这一点:https://github.com/reduxjs/reselect#q-are-there-typescript-typings

这个备忘单似乎也没有提供这个: https://github.com/piotrwitek/react-redux-typescript-guide#selectors-with-reselect

import { createSelector } from 'reselect';

import { TodosState } from './reducer';

export const getTodos = (state: TodosState) => state.todos;

export const getTodosFilter = (state: TodosState) => state.todosFilter;

export const getFilteredTodos = createSelector(getTodos, getTodosFilter, (todos, todosFilter) => {
  switch (todosFilter) {
    case 'completed':
      return todos.filter(t => t.completed);
    case 'active':
      return todos.filter(t => !t.completed);

    default:
      return todos;
  }
});

如果我知道getFilteredTodos 的返回是这样的:

type Return = {
  text: string;
  completed: boolean;
}[]

那我可以定义这个吗?

【问题讨论】:

  • 据我所知,如果推断错误,您只需要定义最后一个函数返回。所以应该只是(todos, todosFilter): { text: string; completed: boolean; }[]

标签: typescript reselect


【解决方案1】:

你可以这样定义返回值:

export const getFilteredTodos = createSelector(getTodos, getTodosFilter, (todos, todosFilter) : { text: string; completed: boolean; }[] => {
  switch (todosFilter) {
    case 'completed':
      return todos.filter(t => t.completed);
    case 'active':
      return todos.filter(t => !t.completed);

    default:
      return todos;
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2019-12-19
    • 2020-12-03
    • 2021-10-06
    相关资源
    最近更新 更多