TypeScript中AWSLambda.APIGatewayProxyHandler函数仅1个入参为何调用要3个
问题原因
这个问题完全由AWSLambda.APIGatewayProxyHandler类型定义导致,和返回值类型Promise<AWSLambda.APIGatewayProxyResult>没有关联。
TypeScript中变量的标注类型优先级高于函数字面量的参数声明:APIGatewayProxyHandler类型本身的定义就规定了函数需要接收3个入参,依次是API网关触发的事件对象、Lambda运行上下文对象、回调函数。你在写函数实现时只声明了1个arg参数,只是因为业务逻辑不需要用到后两个参数就做了省略,但TS的类型校验还是会以你标注的Handler类型为准,所以调用时会要求传入3个符合类型的参数。
单元测试解决方案
你可以根据自己的使用场景选以下任意一种处理方式:
- 如果你不需要用到后两个参数,调用时传入符合类型的占位值即可,示例代码如下:
import type { Context, APIGatewayProxyCallback } from 'aws-lambda'; // 构造测试入参 const mockEvent = {}; // 替换为你自己的测试入参 const mockContext = {} as Context; const mockCallback = (() => {}) as APIGatewayProxyCallback; // 调用函数 const result = await func(mockEvent, mockContext, mockCallback);
- 如果你不想每次测试都传入无用占位参数,可以把业务逻辑从Handler函数中抽离出来,单独导出供测试调用,外层只保留符合Handler类型的包装函数即可。
内容的提问来源于stack exchange,提问作者Sabo Boz
相关产品推荐
相关产品推荐

