You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地调用AWS Lambda函数voidTransaction时如何正确传递event与context?

问题

我编写了如下AWS Lambda函数:

export const voidTransaction = async function (
  event: ApiEvent,
  context: ApiContext,
): Promise<ApiResponse> {
  return lambdaWrapper(async () => {
    const body = await start<NayaxVoidRequestBody>(event, context, 'Void-Request');
    return {
      body: await voidNayaxTransaction(
        event.pathParameters.transactionId,
        body.reasonText,
        body.reasonCode,
      ),
    };
  });
};

我需要在另一个函数中调用该函数并传入event和context,但当我按如下方式指定event时:

const voidResponse = await voidTransaction(pathParameters: {
        transactionId: transaction.id,
      }, context);

出现错误提示:
Argument of type '{ pathParameters: { transactionId: any; }; }' is not assignable to parameter of type 'APIGatewayProxyEvent'
请问该如何正确传递参数?

解决方案

报错原因是你传入的对象不符合APIGatewayProxyEvent(即你的ApiEvent类型)的完整结构要求,仅传递pathParameters字段不足以满足类型校验。你可以通过以下两种方式解决:

方式一:构造符合类型要求的完整event对象

根据ApiEvent的类型定义,补充所有必要字段(至少包含你的函数和start方法用到的内容):

// 构造符合ApiEvent规范的event对象
const mockEvent: ApiEvent = {
  pathParameters: {
    transactionId: transaction.id
  },
  // 若start函数需要读取请求body,需将参数转为JSON字符串填入
  body: JSON.stringify({
    reasonText: "撤销原因描述",
    reasonCode: "对应的原因编码"
  }),
  // 补充其他ApiEvent要求的必填字段,如httpMethod、requestContext等,可选字段可按需省略
  httpMethod: "POST",
  requestContext: {}
};

// 调用voidTransaction函数
const voidResponse = await voidTransaction(mockEvent, context);

方式二:抽离核心逻辑简化调用

将业务逻辑从Lambda入口函数中抽离,内部调用时直接使用核心函数,无需构造复杂的event对象:

// 抽离核心业务逻辑
export const voidNayaxTransactionHandler = async (
  transactionId: string,
  reasonText: string,
  reasonCode: string
) => {
  return await voidNayaxTransaction(transactionId, reasonText, reasonCode);
};

// 原Lambda入口函数
export const voidTransaction = async function (
  event: ApiEvent,
  context: ApiContext,
): Promise<ApiResponse> {
  return lambdaWrapper(async () => {
    const body = await start<NayaxVoidRequestBody>(event, context, 'Void-Request');
    return {
      body: await voidNayaxTransactionHandler(
        event.pathParameters.transactionId,
        body.reasonText,
        body.reasonCode,
      ),
    };
  });
};

// 内部调用时直接使用抽离的函数
const voidResponse = await voidNayaxTransactionHandler(transaction.id, "撤销原因描述", "原因编码");

这种方式不仅能避免类型报错,还能让代码结构更清晰,减少重复的对象构造工作。

内容的提问来源于stack exchange,提问作者Rajarshi Ghoshal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:32:23