【问题标题】:Middy with TypeScript, callback typeMiddy with TypeScript,回调类型
【发布时间】:2021-02-24 01:12:49
【问题描述】:

我正在尝试在 Lambda API 调用中使用带有 Middy 的 TyepScript。 我的部分代码:

// My types definition
import BodyRequestType from 'types';

// some code

async function myFunction (
  event: { body: BodyRequestType },
  callback: ??? <--
): Promise<void> {
  // my code
  return callback(null, {
    statusCode: 200,
    body: JSON.stringify(data)
  });
}

export const handler = middy(myFunction);

我尝试使用:

import { Callback } from 'aws-lambda'
// then...
callback: Callback

但我在middy(myFunction) 收到此错误:

TS2345: Argument of type '(event: { body: BodyRequestType; }, callback: Callback<any>) => Promise<void>' is not assignable to 
parameter of type 'AsyncHandler<Context>'.
Type '(event: { body: BodyRequestType; }, callback: Callback<any>) => Promise<void>'
is not assignable to type '(event: any, context: Context, callback: Callback<any>) => void'.
Types of parameters 'callback'and 'context' are incompatible.
Type 'Context' is not assignable to type 'Callback<any>'.
Type 'Context' provides no match for the signature '(error?: string | Error | null | undefined, result?: any): void'.

我应该在 myFunction 的 callback 参数上使用什么类型?

【问题讨论】:

    标签: typescript middy


    【解决方案1】:

    问题是第二个参数应该是Context 类型的签名而不是回调。

    由于需要上下文,因此您只需将contextcallback 分别设置为第二、第三个参数,如下所示:

    
    import { Context, Callback } from 'aws-lambda';
    
    
    async function myFunction (
      event: { body: BodyRequestType },
      context: Context,
      callback: Callback 
    ) {
      // ...
    }
    
    

    【讨论】:

    • 我在 30 分钟前放弃了,并把 any 放在其他事情上,然后我读到这些参数的顺序很重要... ...以及类型,谢谢男人!
    • 有个小窍门就是直接在包里读取类型定义对你有很大帮助
    猜你喜欢
    • 2012-10-19
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2020-06-09
    • 2021-12-11
    • 2021-04-09
    • 2021-09-03
    相关资源
    最近更新 更多