

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 TypeScript 建置 Lambda 函數
<a name="lambda-typescript"></a>

您可以使用 Node.js 執行期在 AWS Lambda中執行 TypeScript。由於 Node.js 不會在本機執行 TypeScript 程式碼，因此必須先將 TypeScript 程式碼轉譯為 JavaScript。然後，使用 JavaScript 檔案，將函數程式碼部署至 Lambda。您的程式碼會在包含適用於 JavaScript 的 AWS 開發套件的環境中執行，其中包含您管理之 AWS Identity and Access Management (IAM) 角色的登入資料。若要進一步了解 Node.js 執行時期隨附的 SDK 版本，請參閱 [包含執行時期的 SDK 版本](lambda-nodejs.md#nodejs-sdk-included)。

Lambda 支援以下 Node.js 執行期。


| 名稱 | 識別符 | 作業系統 | 取代日期 | 封鎖函數建立 | 封鎖函數更新 | 
| --- | --- | --- | --- | --- | --- | 
| Node.js 24 | `nodejs24.x` | Amazon Linux 2023 |  2028 年 4 月 30 日  |  2028 年 6 月 1 日  |  2028 年 7 月 1 日  | 
| 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 年 8 月 31 日  |  2026 年 9 月 30 日  | 

**Topics**
+ [設定 TypeScript 開發環境](#typescript-dev)
+ [Lambda 的類型定義](#typescript-type-definitions)
+ [定義 TypeScript 格式的 Lambda 函數處理常式](typescript-handler.md)
+ [使用 .zip 檔案封存，在 Lambda 中部署轉換的 TypeScript 程式碼](typescript-package.md)
+ [使用容器映像在 Lambda 中部署轉譯的 TypeScript 程式碼](typescript-image.md)
+ [使用 Lambda 內容物件擷取 TypeScript 函數資訊](typescript-context.md)
+ [記錄和監控 TypeScript Lambda 函數](typescript-logging.md)
+ [在 中追蹤 TypeScript 程式碼 AWS Lambda](typescript-tracing.md)

## 設定 TypeScript 開發環境
<a name="typescript-dev"></a>

使用本機整合式開發環境 (IDE) 或文字編輯器來編寫 TypeScript 函式程式碼。無法在 Lambda 主控台上建立 TypeScript 程式碼。

您可以使用 [esbuild](https://esbuild.github.io/) 或 Microsoft 的 TypeScript 編譯器 (`tsc`)，將 TypeScript 程式碼轉譯為 JavaScript。[AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started.html) 與 [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) 均採用 esbuild。

使用 esbuild 時，請考慮下列事項︰
+ 存在若干 [TypeScript caveats](https://esbuild.github.io/content-types/#typescript-caveats)。
+ 您必須設定 TypeScript 轉譯設定，以便與計劃使用的 Node.js 執行時期相符。如需詳細資訊，請參閱 esbuild 文件中的[目標](https://esbuild.github.io/api/#target)。如需 **tsconfig.json** 檔案的範例，該檔案示範了如何以 Lambda 支援的特定 Node.js 版本為目標，請參閱 [TypeScript GitHub 儲存庫](https://github.com/tsconfig/bases/blob/main/bases/node14.json)。
+ esbuild 不執行類型檢查。若要檢查類型，請使用 `tsc` 編譯器。執行 `tsc -noEmit` 或將 `"noEmit"` 參數新增至 **tsconfig.json** 檔案，如下列範例所示。這會將 `tsc` 設定為不發出 JavaScript 檔案。檢查類型後，使用 esbuild 將 TypeScript 檔案轉換為 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"]
}
```

## Lambda 的類型定義
<a name="typescript-type-definitions"></a>

[@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda) 套件提供 Lambda 函式的類型定義。若您的函式使用下列任意一項，請安裝此套件：
+ 常見 AWS 事件來源，例如：
  + `APIGatewayProxyEvent`：適用於 [Amazon API Gateway 代理整合](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html) 
  + `SNSEvent`：適用於 [Amazon Simple Notification Service 通知](with-sns.md)
  + `SQSEvent`：適用於 [Amazon Simple Queue Service 訊息](with-sqs.md)
  + `S3Event`：適用於 [S3 觸發事件](with-s3.md)
  + `DynamoDBStreamEvent`：適用於 [Amazon DynamoDB Streams](with-ddb.md)
+ Lambda [內容](typescript-context.md)物件
+ [回呼](typescript-handler.md#typescript-handler-callback)處理常式模式

若要將 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](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/aws-lambda)。

**注意**  
若您使用自訂類型定義，則無需安裝 [@types/aws-lambda](https://www.npmjs.com/package/@types/aws-lambda) 套件。如需可定義自訂事件物件類型的函式範例，請參閱 [TypeScript Lambda 函式程式碼範例](typescript-handler.md#typescript-example-code)。