AWS Lambda Callback的函数签名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS Lambda Callback的函数签名相关的知识,希望对你有一定的参考价值。
我想为AWS Lambda的回调函数创建一个Typescript,并且必须做一些愚蠢的事情,因为我在看似容易的事情上遇到错误。我接近它的方法是为SUCCESS和FAILURE条件设置两个函数定义,然后将它们包装在一起作为一个有区别的联合。
所以这是我的类型:
export interface ILambdaSuccessCallback<T = IDictionary> {
(error: null, response: T): void;
}
export interface ILambdaFailureCallback<E = ILambdaErrorResponse> {
(error: string | number, response: E): void;
}
export interface ILambdaErrorResponse<T = any> {
errorCode?: string | number;
message?: string;
errors?: T[];
stackTrace?: string[];
}
/** Discriminated Union */
export type LambdaCallback<T = IDictionary, E = ILambdaErrorResponse> =
| LambdaSuccessCallback<T>
| LambdaFailureCallback<E>;
我现在将我的小视觉测试包含在vs-code中,显示失败和成功的行为或明确使用,但更重要的是,这种歧视联盟只是不起作用:
联合类型(使用|
定义)表示可以是ILambdaSuccessCallback
或ILambdaFailureCallback
的类型,这意味着两个签名都不可调用,因为编译器无法检查哪个是有效的。使用联合类型,您只能访问公共字段和签名,而ILambdaSuccessCallback
和ILambdaFailureCallback
没有共同的属性或签名,
如果你的函数可以处理两个签名,你想要一个交集类型(用&
定义)
export type LambdaCallback<T = IDictionary, E = ILambdaErrorResponse> =
& ILambdaSuccessCallback<T>
& ILambdaFailureCallback<E>;
const either: LambdaCallback = function (err: null | string | number, con: IDictionary | ILambdaErrorResponse) {
}
either(null, {}) // Works
either(500, {}) // Works
第二个failure
调用(failure(null, {})
)有效,因为在Typescript中,null
和undefined
是所有类型的子类型(请参阅spec),因此您可以将null
分配给string | number
,您可以启用strictNullChecks
以使编译器禁止此情况(但这可能会导致很多其他警告)
以上是关于AWS Lambda Callback的函数签名的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda 函数返回模块“索引”上缺少的处理程序“处理程序”
使用 API Gateway 处理 AWS Lambda 函数中的错误
如何在 Lambda 函数中使用 AWS.CloudFront.Signer