9

I'm switching to the new Node AWS SDK (v3) to take advantage of its modularity and Typescript support. The first thing I needed to do was to write a Lambda function, but I can't find types to support the handler function signature. The types in the @aws/client-lambda seem to all be related to, well, a client for managing Lambda.

Does the Node SDK have official types for writing Lambdas somewhere? In particular:

  • Where is the type for the context argument?
  • For event argument, is there a list somewhere of the events that can come from other AWS services and their corresponding types?
interface Event {
  // This could be anything -- a custom structure or something 
  // created by another AWS service, so it makes sense that
  // there isn't a discoverable type for this. There should be
  // corresponding types for each service that can send events
  // to Lambda functions though. Where are these?
}

interface Context {
  // This is provided by Lambda, but I can't find types for it anywhere.
  // Since it's always the same, there should be a type defined somewhere,
  // but where?
}

exports.handler = ( event: Event, context: Context )=>{
  // While `event` could anything so it makes sense to not have a single type available,
  // `context` is always the same thing and should have a type somewhere.
}
Adam Coster
  • 1,162
  • 1
  • 9
  • 16

1 Answers1

9

Use aws-lambda types, it have types for most of the events.

Example handlers:

import { SQSHandler, SNSHandler, APIGatewayProxyHandler } from 'aws-lambda';

export const sqsHandler: SQSHandler = async (event, context) => {
  
}

export const snsHandler: SNSHandler = async (event, context) => {
}

export const apiV2Handler: APIGatewayProxyHandler = async (event, context) => {
  return {
    body: 'Response body',
    statusCode: 200
  }
}
nirvana124
  • 903
  • 1
  • 9
  • 12
  • 2
    Does this answer imply that the new v3 aws-sdk does not actually provide these types and that the correct solution is to rely on this independent library? – fraxture May 16 '22 at 21:58
  • @types/aws-lambda is pretty much active so I guess this is still the way to go in 2022. – webartisan Jun 27 '22 at 06:49