使用 TypeScript 构建 Lambda 函数 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 TypeScript 构建 Lambda 函数

你可以使用 Node.js 运行时在 Amazon Lambda 中运行 TypeScript 代码。由于 Node.js 不会在本机运行 TypeScript 代码,因此必须首先将 TypeScript 代码转换为 JavaScript。然后,可以使用 JavaScript 文件将您的函数代码部署到 Lambda。您的代码将在包含适用于 JavaScript 的 Amazon SDK 的环境中运行,其中包含来自您管理的 Amazon Identity and Access Management (IAM) 角色的凭证。要了解有关 Node.js 运行时随附的 SDK 版本的更多信息,请参阅 包含运行时的 SDK 版本

Lambda 支持以下 Node.js 运行时。

名称 标识符 操作系统 弃用日期 阻止函数创建 阻止函数更新

Node.js 22

nodejs22.x

Amazon Linux 2023

2027 年 4 月 30 日

2027 年 6 月 1 日

2027 年 7 月 1 日

Node.js 20

nodejs20.x

Amazon Linux 2023

2026 年 4 月 30 日

2026 年 6 月 1 日

2026 年 7 月 1 日

Node.js 18

nodejs18.x

Amazon Linux 2

2025 年 9 月 1 日

2025 年 10 月 1 日

2025 年 11 月 1 日

设置 TypeScript 开发环境

使用本地集成式开发环境(IDE)或文本编辑器来编写 TypeScript 函数代码。您无法在 Lambda 控制台上创建 TypeScript 代码。

您可以使用 esbuild 或 Microsoft 的 TypeScript 编译器(tsc)将您的 TypeScript 代码转换为 JavaScript。Amazon Serverless Application Model(Amazon SAM)Amazon Cloud Development Kit (Amazon CDK) 都使用 esbuild。

在使用 esbuild 时,请注意以下事项:

  • 有几个 TypeScript 注意事项

  • 您必须配置 TypeScript 转换设置,以匹配您计划使用的 Node.js 运行时。有关更多信息,请参阅 esbuild 文档中的目标。有关演示如何将 Lambda 支持的特定 Node.js 版本设为目标的 tsconfig.json 文件示例,请参阅 TypeScript GitHub 存储库

  • esbuild 不执行类型检查。要检查类型,请使用 tsc 编译器。运行 tsc -noEmit 或将 "noEmit" 参数添加到您的 tsconfig.json 文件,如以下示例中所示。这会将 tsc 配置为不发出 JavaScript 文件。在检查类型后,使用 esbuild 将 TypeScript 文件转换为 JavaScript。

例 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"] }

Lambda 的类型定义

@types/aws-lambda 程序包为 Lambda 函数提供类型定义。如果您的函数使用以下任何一项,请安装此程序包:

要将 Lambda 类型定义添加到您的函数中,请将 @types/aws-lambda 作为开发依赖项进行安装:

npm install -D @types/aws-lambda

然后,从 aws-lambda 导入这些类型:

import { Context, S3Event, APIGatewayProxyEvent } from 'aws-lambda'; export const handler = async (event: S3Event, context: Context) => { // Function code };

import ... from 'aws-lambda' 语句会导入类型定义。但它不会导入 aws-lambda npm 程序包,这是一个无关的第三方工具。有关更多信息,请参阅 DefinitelyTyped GitHub 存储库中的 aws-lambda

注意

使用自己的自定义类型定义时,无需使用 @types/aws-lambda。有关为事件对象定义其自身类型的示例函数,请参阅 示例 TypeScript Lambda 函数代码