我有一个 takeLatest() 传奇函数,它调用一个名为 postDeliverySubmitSaga() 的传奇,我想将参数传递给它。

我这样定义我的函数:

export function* postDeliverySubmitSaga({
,reactjs,typescript,redux-saga"/>
	














首页 > 解决方案 > “找不到

我有一个 takeLatest() 传奇函数,它调用一个名为 postDeliverySubmitSaga() 的传奇,我想将参数传递给它。

我这样定义我的函数:

export function* postDeliverySubmitSaga({

问题描述

我有一个 takeLatest() 传奇函数,它调用一个名为 postDeliverySubmitSaga() 的传奇,我想将参数传递给它。

我这样定义我的函数:

export function* postDeliverySubmitSaga({
  payload: any
}: ReturnType<typeof setDeliverySubmit>) {
  console.log(payload);
}

export function* deliveryDataSaga() {
  yield takeLatest(setDeliverySubmit.toString(), postDeliverySubmitSaga);
}

但我收到以下错误:

Cannot find name 'payload'.  TS2304

    102 |   payload: any
    103 | }: ReturnType<typeof setDeliverySubmit>) {
  > 104 |   console.log(payload);
        |               ^
    105 | }
    106 |
    107 | export function* deliveryDataSaga() {

编辑:

我试图像这样定义传奇。它编译得很好,但是当我尝试获取有效负载对象的成员(在本例中为payload.userToken)时,它会抛出一个错误,指出有效负载是类型unknown

export function* postDeliverySubmitSaga({
  payload
}: ReturnType<typeof setDeliverySubmit>) {
  const userToken = payload.userToken;
  console.log(userToken);
}

Object is of type 'unknown'.  TS2571

    102 |   payload
    103 | }: ReturnType<typeof setDeliverySubmit>) {
  > 104 |   const userToken = payload.userToken;
        |                     ^
    105 |   console.log(userToken);
    106 | }
    107 |

编辑2:

如果我这样做:

export function* postDeliverySubmitSaga({
  payload
}: {
  payload: IDeliverySubmitData;
}) {
  console.log(payload);
}

然后我得到以下编译错误:

No overload matches this call.
  The last overload gave the following error.
    Argument of type 'ActionFunctionAny<Action<unknown>>' is not assignable to parameter of type 'TakeableChannel<unknown>'.
      Property 'take' is missing in type 'ActionFunctionAny<Action<unknown>>' but required in type 'TakeableChannel<unknown>'.  TS2769

    110 |
    111 | export function* deliveryDataSaga() {
  > 112 |   yield takeLatest(setDeliverySubmit, postDeliverySubmitSaga);
        |                    ^
    113 | }
    114 |

函数fetchSingleUser总是返回 'undefined' 因为你在 catch 之后没有返回任何东西(发生错误之后)。您只定义成功的返回值。

但是为什么会发生错误,因为const res 不包含Responses.users[0].

简单的解决方案

更改let result = { UserId: 'segf876seg876', Age: 33, Name: 'Paul' }以满足代码Responses.users[0]

const result = {
    Responses: {
        users: [{ UserId: 'segf876seg876', Age: 33, Name: 'Paul' }],
      },
    };

注意:如果不更改变量值,请使用const 。

标签: reactjstypescriptredux-saga

解决方案


那是因为从参数payload解包any并分配给名为.

键入参数与解构分配新名称之间的混淆。


只需删除: any

export function* postDeliverySubmitSaga({
  payload
}: ReturnType<typeof setDeliverySubmit>) {
  console.log(payload);
}

不相关,redux-saga 足够聪明,可以识别toString动作创建者,所以观察者可以只是:yield takeLatest(setDeliverySubmit, postDeliverySubmitSaga);


推荐阅读