

# Criar funções Lambda com TypeScript
<a name="lambda-typescript"></a>

Você pode usar o runtime Node.js para executar o código TypeScript no AWS Lambda. Como o Node.js não executa o código TypeScript de modo nativo, você deve primeiro transcompilar seu código TypeScript em JavaScript. Em seguida, use os arquivos JavaScript para implantar o código de função no Lambda. Seu código é executado em um ambiente que inclui o AWS SDK for JavaScript, com as credenciais de uma função do AWS Identity and Access Management (IAM) que você gerencia. Para saber mais sobre as versões do SDK incluídas nos runtimes do Node.js, consulte [Versões do SDK incluídas no runtime](lambda-nodejs.md#nodejs-sdk-included).

O Lambda oferece suporte aos runtimes Node.js a seguir.


| Nome | Identificador | Sistema operacional | Data da substituição | Bloquear a criação de funções | Bloquear a atualização de funções | 
| --- | --- | --- | --- | --- | --- | 
| Node.js 24 | `nodejs24.x` | Amazon Linux 2023 |  30 de abril de 2028  |  1º de junho de 2028  |  1º de julho de 2028  | 
| Node.js 22 | `nodejs22.x` | Amazon Linux 2023 |  30 de abril de 2027  |  1º de junho de 2027  |  1º de julho de 2027  | 
| Node.js 20 | `nodejs20.x` | Amazon Linux 2023 |  30 de abril de 2026  |  31 de agosto de 2026  |  30 de setembro de 2026  | 

**Topics**
+ [Configurar seu ambiente de desenvolvimento de TypeScript](#typescript-dev)
+ [Definições de tipo para o Lambda](#typescript-type-definitions)
+ [Definir o manipulador de função do Lambda em TypeScript](typescript-handler.md)
+ [Implantar código TypeScript transcompilado no Lambda com arquivos .zip](typescript-package.md)
+ [Implantar código TypeScript transcompilado no Lambda com imagens de contêiner](typescript-image.md)
+ [Usar o objeto de contexto do Lambda para recuperar informações das funções em TypeScript](typescript-context.md)
+ [Registrar em log e monitorar funções do Lambda em TypeScript](typescript-logging.md)
+ [Como rastrear o código TypeScript no AWS Lambda](typescript-tracing.md)

## Configurar seu ambiente de desenvolvimento de TypeScript
<a name="typescript-dev"></a>

Use um ambiente de desenvolvimento integrado (IDE) ou editor de texto local para escrever o código de função TypeScript. Não é possível criar código TypeScript no console do Lambda.

É possível usar o [esbuild](https://esbuild.github.io/) ou o compilador TypeScript da Microsoft (`tsc`) para transcompilar seu código TypeScript em JavaScript. Tanto o [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started.html) quanto o [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) usam esbuild.

Ao usar o esbuild, considere o seguinte:
+ Existem várias [advertências de TypeScript](https://esbuild.github.io/content-types/#typescript-caveats).
+ É necessário definir as configurações de transcompilação do TypeScript para corresponder ao runtime Node.js que você pretende usar. Para obter mais informações, consulte [Target](https://esbuild.github.io/api/#target) (Destino) na documentação do esbuild. Para ver um exemplo de arquivo **tsconfig.json** que mostra como direcionar uma versão específica do Node.js compatível com o Lambda, consulte o [repositório GitHub do TypeScript](https://github.com/tsconfig/bases/blob/main/bases/node14.json).
+ O esbuild não executa verificações de tipo. Para verificar tipos, use o compilador `tsc`. Execute `tsc -noEmit` ou adicione um parâmetro `"noEmit"` no arquivo **tsconfig.json**, conforme mostrado no exemplo a seguir. Isso configura `tsc` para não emitir arquivos JavaScript. Após verificar os tipos, use esbuild para converter os arquivos TypeScript em JavaScript.

**Example tsconfig.json**  

```
 {
  "compilerOptions": {
    "target": "es2020",
    "strict": true,
    "preserveConstEnums": true,
    "noEmit": true,
    "sourceMap": false,
    "module":"commonjs",
    "moduleResolution":"node",
    "esModuleInterop": true, 
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true, 
    "isolatedModules": true, 
  },
  "exclude": ["node_modules", "**/*.test.ts"]
}
```

## Definições de tipo para o Lambda
<a name="typescript-type-definitions"></a>

O pacote [@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda) fornece definições de tipo para as funções do Lambda. Instale esse pacote quando sua função usar qualquer uma das seguintes opções:
+ Fontes de eventos comuns da AWS, como:
  + `APIGatewayProxyEvent`: para [integrações de proxy no Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html) 
  + `SNSEvent`: para [notificações do Amazon Simple Notification Service](with-sns.md)
  + `SQSEvent`: para [mensagens do Amazon Simple Queue Service](with-sqs.md)
  + `S3Event`: para [eventos de gatilho do S3](with-s3.md)
  + `DynamoDBStreamEvent`: para [Amazon DynamoDB Streams](with-ddb.md)
+ O objeto [Context](typescript-context.md) do Lambda
+ O padrão do manipulador [callback](typescript-handler.md#typescript-handler-callback)

Para adicionar as definições de tipo do Lambda à sua função, instale `@types/aws-lambda` como uma dependência de desenvolvimento:

```
npm install -D @types/aws-lambda
```

Em seguida, importe os tipos de `aws-lambda`:

```
import { Context, S3Event, APIGatewayProxyEvent } from 'aws-lambda';

export const handler = async (event: S3Event, context: Context) => {
    // Function code
};
```

A instrução `import ... from 'aws-lambda'` importa as definições de tipo. Ela não importa o pacote `aws-lambda` do npm, que é uma ferramenta de terceiros não relacionada. Para obter mais informações, consulte [aws-lambda](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/aws-lambda) no repositório DefinitelyTyped do GitHub.

**nota**  
Você não precisa de [@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda) ao usar suas próprias definições de tipo personalizadas. Para obter um exemplo de função que define seu próprio tipo para um objeto de evento, consulte [Exemplo de função do Lambda em TypeScript](typescript-handler.md#typescript-example-code).