

# Creación de funciones de Lambda con TypeScript
<a name="lambda-typescript"></a>

Se puede utilizar el tiempo de ejecución de Node.js para ejecutar código TypeScript en AWS Lambda. Dado que Node.js no ejecuta código de TypeScript de manera nativa, antes se debe transpilar el código de TypeScript a JavaScript. A continuación, utilice los archivos JavaScript para implementar el código de la función en Lambda. El código se ejecuta en un entorno que incluye AWS SDK para JavaScript, con credenciales de un rol de AWS Identity and Access Management (IAM) que usted administra. Para obtener más información sobre las versiones del SDK incluidas en los tiempos de ejecución de Node.js, consulte [Versiones del SDK incluidas en el tiempo de ejecución](lambda-nodejs.md#nodejs-sdk-included).

Lambda admite los siguientes tiempos de ejecución de Node.js.


| Nombre | Identificador | Sistema operativo | Fecha de baja | Bloqueo de la función Crear | Bloqueo de la función Actualizar | 
| --- | --- | --- | --- | --- | --- | 
| Node.js 24 | `nodejs24.x` | Amazon Linux 2023 |  30 de abril de 2028  |  1 de junio de 2028  |  1 de julio de 2028  | 
| Node.js 22 | `nodejs22.x` | Amazon Linux 2023 |  30 de abril de 2027  |  1 de junio de 2027  |  1 de julio de 2027  | 
| Node.js 20 | `nodejs20.x` | Amazon Linux 2023 |  30 de abril de 2026  |  31 de agosto de 2026  |  30 de septiembre de 2026  | 

**Topics**
+ [Configuración de un entorno de desarrollo de TypeScript](#typescript-dev)
+ [Definiciones de tipos de Lambda](#typescript-type-definitions)
+ [Definir el controlador de funciones de Lambda en Typescript](typescript-handler.md)
+ [Implementar código de TypeScript transpilado en Lambda con archivos .zip](typescript-package.md)
+ [Implementar código de TypeScript transpilado en Lambda con imágenes de contenedor](typescript-image.md)
+ [Uso del objeto de contexto Lambda para recuperar la información de la función de TypeScript](typescript-context.md)
+ [Registro y supervisión de las funciones de Lambda de TypeScript](typescript-logging.md)
+ [Seguimiento del código de TypeScript en AWS Lambda](typescript-tracing.md)

## Configuración de un entorno de desarrollo de TypeScript
<a name="typescript-dev"></a>

Use un entorno de desarrollo integrado (IDE) local o un editor de texto para escribir el código de la función de TypeScript. No se puede crear código de TypeScript en la consola de Lambda.

Puede usar [esbuild](https://esbuild.github.io/) o el compilador de TypeScript de Microsoft (`tsc`) para transpilar su código TypeScript a JavaScript. Tanto [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started.html) como [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) usan esbuild.

Al utilizar esbuild, tenga en cuenta lo siguiente:
+ Existen varias [advertencias en relación con TypeScript](https://esbuild.github.io/content-types/#typescript-caveats).
+ La configuración de transpilación de TypeScript se debe establecer de modo que coincida con el tiempo de ejecución de Node.js que se piense utilizar. Para obtener más información, consulte [Target](https://esbuild.github.io/api/#target) (Destino) en la documentación de esbuild. Para ver un ejemplo de archivo **tsconfig.json** que muestra cómo orientarse a una versión específica de Node.js compatible con Lambda, consulte el [repositorio de GitHub de TypeScript](https://github.com/tsconfig/bases/blob/main/bases/node14.json).
+ esbuild no realiza comprobaciones de tipos. Para comprobar los tipos, utilice el compilador `tsc`. Ejecute `tsc -noEmit` o agregue un parámetro `"noEmit"` al archivo **tsconfig.json**, como se muestra en el siguiente ejemplo. Eso configura `tsc` para que no emita archivos JavaScript. Después de comprobar los tipos, utilice esbuild para convertir los archivos de TypeScript a 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"]
}
```

## Definiciones de tipos de Lambda
<a name="typescript-type-definitions"></a>

El paquete [@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda) proporciona definiciones de tipos para funciones de Lambda. Instale este paquete cuando su función use cualquiera de los siguientes elementos:
+ Orígenes de eventos de AWS habituales, como:
  + `APIGatewayProxyEvent`: para [integraciones de proxy de Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html) 
  + `SNSEvent`: para [notificaciones de Amazon Simple Notification Service](with-sns.md)
  + `SQSEvent`: para [mensajes de Amazon Simple Queue Service](with-sqs.md)
  + `S3Event`: para [eventos desencadenadores de S3](with-s3.md)
  + `DynamoDBStreamEvent`: para [Amazon DynamoDB Streams](with-ddb.md)
+ El objeto de [contexto](typescript-context.md) de Lambda
+ El patrón del controlador de [devolución de llamada](typescript-handler.md#typescript-handler-callback)

Para agregar las definiciones de tipos de Lambda a su función, instale `@types/aws-lambda` como una dependencia de desarrollo:

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

A continuación, importe los tipos desde `aws-lambda`:

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

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

La instrucción `import ... from 'aws-lambda'` importa las definiciones de tipos. No importa el paquete npm de `aws-lambda`, que es una herramienta de terceros no relacionada. Para obtener más información, consulte [aws-lambda](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/aws-lambda) en el repositorio de GitHub DefinitelyTyped.

**nota**  
No necesita [@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda) cuando usa sus propias definiciones de tipos personalizadas. Para ver un ejemplo de función que define su propio tipo para un objeto de evento, consulte [Ejemplo de código de una función de Lambda en TypeScript](typescript-handler.md#typescript-example-code).