Синтаксис Typescript для лямбда, который запускается из разных событий

Используя бессерверную структуру, я определил 9X_serverless-framework лямбду, которая может запускаться каждый 9X_amazon-sns час или через SNS

  ...
  functions: {
    fooAction: {
      handler: 'handler.fooAction',
      events: [
        {
          schedule: 'rate(1 hour)',
        },
        {
          sns: {
            topicName: 'fooTopic',
          },
        },
      ],
    },
   ...
  }
  ...

Каков правильный синтаксис 9X_amazon-sns машинописного текста при определении функции 9X_aws-event-bridge fooAction?

Я пробовал

import { SNSHandler, ScheduledHandler} from 'aws-lambda';
...
export const fooAction: ScheduledHandler | SNSHandler = async (evt) => { ... };

но evt преобразуется в any.

5
0
1
Общее количество ответов: 1

Ответ #1

Ответ на вопрос: Синтаксис Typescript для лямбда, который запускается из разных событий

Похоже, что в aws-lambda sdk есть тип Handler, который 9X_aws-lambda является универсальным и может использоваться 9X_atscript в подобных ситуациях

import { SNSEvent, EventBridgeEvent, Handler } from 'aws-lambda';

const fooHandler: Handler> = (event) => {
    if ('Records' in event ) {
        // SNSEvent
        const records = event.Records;
        // so something
    } else {
        const { id, version, region, source } = event;
    }
};

Вы также можете определить 9X_atscript свой собственный тип на основе этих двух 9X_serverless-framework разных типов функций.

type CustomEvent = (event: SNSEvent | EventBridgeEvent<"Scheduled Event", any>, context: Context, callback: Callback) => Promise | void

А затем используйте 9X_aws-lambda этот новый тип со своей лямбда-функцией

const fooHandler: CustomEvent = (event) => {
    if ('Records' in event ) {
        // SNSEvent
        const records = event.Records;
        // so something
    } else {
        const { id, version, region, source } = event;
    }
};

12
0