Синтаксис 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