машинопись реагирует на редукцию и редукцию, используя actionType как свойство в дочернем компоненте - PullRequest
0 голосов
/ 07 января 2020

У меня есть пример двух компонентов Задачи и Задача в родительском компоненте Задачи Я подключил хранилище

type Props = ConnectedProps<typeof connector>
const mapDispatchToProps = { updateTask };
const connector = connect(mapStateToProps, mapDispatchToProps);
export default connector(Tasks)

, затем в дочернем Задача Я хочу использовать updateTask, поскольку я не хочу подключать каждую задачу к redux

Task выглядит как

type Props = {
  updateTask: typeof updateTask
}

, но этот код приводит к

Type '(taskId : string, updatedTask: Partial) => void «нельзя назначить типу» (taskId: string, updatedTask: Partial) => ThunkAction '. Тип 'void' нельзя назначить типу 'ThunkAction'.

конечно, поскольку он не go через соединение редуктора

, поэтому мой вопрос в том, безопасно ли использовать InferThunkActionCreatorType из библиотеки 'response-redux'?

type Props = {
  updateTask: InferThunkActionCreatorType<typeof updateTaskAndPropagate>
}

определение равно

export type InferThunkActionCreatorType<TActionCreator extends (...args: any[]) => any> =
    TActionCreator extends (...args: infer TParams) => (...args: any[]) => infer TReturn
        ? (...args: TParams) => TReturn
        : TActionCreator;

это именно то, что мне нужно, те же параметры функции, но тип возвращаемого значения void

1 Ответ

1 голос
/ 07 января 2020

Да, это идеальный тип для вашего случая использования. Это то, что используется в типе Connect (сигнатура функции соединения), поэтому оно имитирует именно то, что вы ищете.

То есть вы бы сделали

type Props = {
  updateTask: InferThunkActionCreatorType<typeof updateTask>
}

О, на всякий случай, если вы не знали: теперь есть тип ConnectedProps, который облегчит вам печатать connect: документация

В общем, может прийти удобно:)

...