You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda中使用@aws-sdk/lib-dynamodb执行BatchWriteCommand遇类型错误

解决DynamoDB BatchWriteCommand的TypeScript类型错误

问题根源

你的代码存在几个关键错误,直接导致了类型报错:

  1. RequestItems格式错误:你用数组[]包裹表名和请求,但AWS SDK要求RequestItems是对象类型(键为表名,值为请求数组),数组格式完全不符合SDK的类型定义。
  2. 环境变量类型未处理:process.env的属性类型是string | undefined,TypeScript会严格检查这种可能为undefined的值,即使硬编码表名也会因格式错误延续问题。
  3. 变量名大小写不一致:定义的field1是小写,代码里却用了Field1,会导致运行时未定义错误。
  4. 函数缺失async关键字:函数内使用了await但未标记为async,属于语法错误。

修正后的代码

import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { DynamoDBDocumentClient, BatchWriteCommand } from "@aws-sdk/lib-dynamodb";
import { randomUUID } from "crypto";

const client = new DynamoDBClient({});
const ddbDocClient = DynamoDBDocumentClient.from(client);

// 提前校验环境变量,避免undefined类型问题
const TABLE_1_NAME = process.env.TABLE_1_NAME;
const TABLE_2_NAME = process.env.TABLE_2_NAME;

if (!TABLE_1_NAME || !TABLE_2_NAME) {
  throw new Error("Missing required table name environment variables");
}

const writeToDatabases = async (body: { field1: unknown; field2: unknown }) => {
  const Id = randomUUID();
  const field1 = String(body.field1);
  const field2 = String(body.field2);

  const response = await ddbDocClient.send(
    new BatchWriteCommand({
      RequestItems: {
        // 使用对象键值对替代数组,符合SDK类型要求
        [TABLE_1_NAME]: [
          {
            PutRequest: {
              Item: {
                Id: Id,
                Field1: field1 // 修正变量名大小写
              }
            }
          }
        ],
        [TABLE_2_NAME]: [
          {
            PutRequest: {
              Item: {
                Id: Id,
                Field2: field2 // 修正变量名大小写
              }
            }
          }
        ]
      }
    })
  );

  return response;
};

关键修正说明

  • RequestItems改为对象结构:将原数组[]替换为对象{},用计算属性[TABLE_1_NAME]动态指定表名,完全匹配SDK的类型定义。
  • 环境变量提前校验:取出环境变量后立即检查是否存在,既解决了TypeScript的undefined类型报错,也能在函数启动时快速发现配置缺失问题。
  • 统一变量名大小写:修正field1/field2的引用一致性,避免运行时的未定义错误。
  • 添加async关键字:函数内使用await必须标记为async,修复语法错误。

内容的提问来源于stack exchange,提问作者user7195808

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:05:10