【问题标题】:typescript react redux and redux-thunk using actionType as property in child componenttypescript 使用 actionType 作为子组件中的属性对 redux 和 redux-thunk 做出反应
【发布时间】:2020-04-24 23:20:26
【问题描述】:

我有两个组件的示例 Tasks 和 Task 在父组件 Tasks 我已经连接了 store

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

然后在子 Task 我想使用 updateTask 因为我不想将每个任务都连接到 redux

任务看起来像

type Props = {
  updateTask: typeof updateTask
}

但该代码导致

类型 '(taskId: string, updatedTask: Partial) => void' 不可分配给类型 '(taskId: string, updatedTask: Partial) => ThunkAction'。类型“void”不可分配给类型“ThunkAction”。

当然,因为它不通过 redux 连接

所以我的问题是使用“react-redux”库中的InferThunkActionCreatorType 是否安全?

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

【问题讨论】:

    标签: reactjs typescript redux redux-thunk


    【解决方案1】:

    是的,这是您的用例的完美类型。 这是 Connect 类型(连接函数的签名)中使用的内容,因此它完全模仿了您正在寻找的内容。

    所以你会这样做

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

    哦,以防万一你不知道:现在有一个 ConnectedProps 类型可以让你更轻松地键入 connectdocumentation

    一般会派上用场:)

    【讨论】:

    • 是的,检查代码部分的第一行 :) 已经在使用它type Props = ConnectedProps&lt;typeof connector&gt;
    • 哎呀,错过了那个:D
    • 但感谢您的确认! :) 现在它是完全类型安全的! :)
    猜你喜欢
    • 1970-01-01
    • 2016-06-12
    • 2019-03-23
    • 2020-01-21
    • 2018-01-18
    • 1970-01-01
    • 2018-09-22
    • 2017-08-24
    • 2020-07-12
    相关资源
    最近更新 更多