Мидди с машинописным текстом, тип обратного вызова

#typescript #middy

#typescript #мидди

Вопрос:

Я пытаюсь использовать TyepScript Middy для вызова лямбда-API. Часть моего кода:

 // 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'.
  

Какой тип я должен использовать для callback аргумента myFunction?

Ответ №1:

Проблема в том, что 2-й аргумент должен быть Context типом в его подписи вместо обратного вызова.

Поскольку требуется контекст, поэтому вы просто устанавливаете context и callback в качестве 2-го, 3-го аргумента соответственно следующим образом:

 
import { Context, Callback } from 'aws-lambda';


async function myFunction (
  event: { body: BodyRequestType },
  context: Context,
  callback: Callback 
) {
  // ...
}

  

Комментарии:

1. Я сдаюсь примерно 30 минут назад и any сосредотачиваюсь на других вещах, затем я прочитал, что порядок для этих аргументов был важен … … а также для типов, спасибо, чувак!

2. Есть совет, который поможет вам прочитать определение типа непосредственно в пакете