Which type do I return with AWS lambda responses in typescript to suite AWS APIGateway Method Response?

The @types/aws-lambda package provides types for using TypeScript inside of an AWS Lambda function. For AWS Lambda functions invoked using API Gateway's Lambda Proxy integration type take the following steps:

Install the package

$ yarn add --dev @types/aws-lambda

Or if you prefer npm:

$ npm i --save-dev @types/aws-lambda

Then in your handler file:

import { APIGatewayProxyEvent, Context, APIGatewayProxyResult } from "aws-lambda"

export async function hello (event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult> {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Hello world',
      input: event,
    })
  }
}

After days of research I found the answer so close ;)

you return Promise<APIGateway.MethodResponse>

import { APIGateway } from "aws-sdk";

export async function readCollection (event, context, callback): Promise<APIGateway.MethodResponse> {

  console.log(event); // Contains incoming request data (e.g., query params, headers and more)

  const data =  [
    {
      id: "a7b5bf50-0b5b-11e9-bc65-6bfc39f23288",
      name: "some thing",
      uri: `/notifications/a7b5bf50-0b5b-11e9-bc65-6bfc39f23288`
    }
  ]

  const response = {
    statusCode: "200",
    headers: {
    },
    body: JSON.stringify({
      status: "ok",
      data: data
     })
  };

  return response;
};