# @aws/dynamodb-data-mapper 中文文档

规范地址：https://npmcn.com/package/%40aws/dynamodb-data-mapper/

版本：0\.7\.3
npm 元数据更新时间：2026-10-15T22:06:36.034Z
中文译文更新时间：2026-11-07T12:33:03.484Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40aws/dynamodb-data-mapper
原文对照：https://npmcn.com/package/%40aws/dynamodb-data-mapper/?lang=original
项目主页：https://awslabs.github.io/dynamodb-data-mapper-js/packages/dynamodb-data-mapper/
源码仓库：https://github.com/awslabs/dynamodb-data-mapper-js

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：240 kB，104 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：6 个
- peer 依赖：aws-sdk ^2\.7\.0
- 首次发布：2017-11-20T23:45:23.021Z
- 最新版本发布：2018-08-15T19:54:03.962Z
- 近 30 天下载量：86247（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：17（近 12 个月 0 个）

## 中文简介

Amazon DynamoDB 基于计划的数据映射器

## 安装

```sh
npm install @aws/dynamodb-data-mapper
```

也可以使用：`pnpm add @aws/dynamodb-data-mapper`、`yarn add @aws/dynamodb-data-mapper`、`bun add @aws/dynamodb-data-mapper`

## README

# 亚马逊 DynamoDB 数据Mapper

[![Apache 2 License](https://img.shields.io/github/license/awslabs/dynamodb-data-mapper-js.svg?style=flat)](http://aws.amazon.com/apache-2-0/)

这个图书馆提供 `DataMapper` 允许简单互操作的类 介于您的应用程序域类和在亚马逊的持久形式之间 迪纳摩DB. 电源 `@aws/dynamodb-data-marshaller` 财务报告和审定财务报表 `@aws/dynamodb-expressions` 软件包,使用 `DataMapper` 让您定义每个 对象持续显示一次,然后加载、保存、扫描和查询 表格使用您的应用程序域的词汇,而不是其 在迪纳摩开发银行的代表.

## 开始

用来使用 `DataMapper` 带有给定的 JavaScript 类,您需要添加一个 组合属性到您想要映射的类的原型 迪纳摩DB桌. 具体地说,您需要提供一个计划以及名称: 该表:

```typescript
import {DynamoDbSchema, DynamoDbTable} from '@aws/dynamodb-data-mapper';

class MyDomainModel {
    // declare methods and properties as normal
}

Object.defineProperties(MyDomainModel.prototype, {
    [DynamoDbTable]: {
        value: 'MyTable'
    },
    [DynamoDbSchema]: {
        value: {
            id: {
                type: 'String',
                keyType: 'HASH'
            },
            foo: {type: 'String'},
            bar: {
                type: 'Set',
                memberType: 'String',
            },
            baz: {
                type: 'Tuple',
                members: [
                    {type: 'Boolean'},
                    {type: 'String'},
                ],
            },
        },
    },
});
```

可直接在图上宣布图和表名称为财产存取人 分类,如果数值应动态确定:

```typescript
import {DynamoDbTable} from '@aws/dynamodb-data-mapper';

class MyOtherDomainClass {
    id: number;

    get [DynamoDbTable]() {
        return this.id % 2 === 0 ? 'evens' : 'odds';
    }
}
```

下一个,创建实例 `DataMapper` 并使用 `MyDomainClass` 构造器 上面定义的用于保存并装入来自 DynatomDB 的对象:

```typescript
import {
    DataMapper,
    DynamoDbSchema,
    DynamoDbTable,
} from '@aws/dynamodb-data-mapper';
import DynamoDB = require('aws-sdk/clients/dynamodb');

const client = new DynamoDB({region: 'us-west-2'});
const mapper = new DataMapper({client});

class MyDomainModel {
    id: string;
    foo?: string;
    bar?: Set<string>;
    baz?: [boolean, string];
}

Object.defineProperties(MyDomainModel.prototype, {
    [DynamoDbTable]: {
        value: 'MyTable'
    },
    [DynamoDbSchema]: {
        value: {
            id: {
                type: 'String',
                keyType: 'HASH'
            },
            foo: {type: 'String'},
            bar: {
                type: 'Set',
                memberType: 'String',
            },
            baz: {
                type: 'Tuple',
                members: [
                    {type: 'Boolean'},
                    {type: 'String'},
                ],
            },
        },
    },
});

// delete an object
const toDelete = new MyDomainModel();
toDelete.id = 'DELETE_ME';
mapper.delete(toDelete);

// if that's too verbose, you can write the above as a single expression with
// Object.assign:
mapper.delete(Object.assign(new MyDomainModel(), {id: 'DELETE_ME'}));

// fetch an object
const toGet = new MyDomainModel();
toGet.id = 'ID_TO_FETCH';
const fetched = await mapper.get(toGet);

// this should return a rejected promise, as it's fetching an object that does
// not exist
mapper.get(toDelete)
    .catch(err => console.log('I expected this to happen'));

// put something new into the database
const toPut = new MyDomainModel();
toPut.id = 'NEW_RECORD';
toPut.foo = 'bar';
toPut.bar = new Set<string>(['fizz', 'buzz', 'pop']);
toPut.baz = [true, 'quux'];

mapper.put(toPut).then((persisted: MyDomainModel) => {
    // now change the record a bit
    const toUpdate = new MyDomainModel();
    toUpdate.id = persisted.id;
    toUpdate.baz = [false, 'beep'];
    return mapper.update(toUpdate, {onMissing: 'skip'});
});
```

## 支助行动

### `batchDelete`

删除一个或多个表格中25个或25个以下的任何项目 页:1 未处理的删除在指数递增后被重审 以表格为基础的备份延迟.

返回已删除项目的同步可移动性( 删除的项目为 当删除已被DynamotB接受时生成). 结果可能是 使用量a `for-await-of` 循环。 如果您正在使用类型脚本, 您需要 包括 `esnext.asynciterable` 在你身边 `lib` 声明(以及授权) `downlevelIteration` 如果目标为ES5或更低。 请参考 [类型脚本 发布注释](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-3.html#async-iteration) 更多信息.

需要一个参数 :

-   要删除的项目的可移动( 同步或同步) 。 每个项目都必须 成为可透过地产访问表格名称的类的例子 与 `DynamoDbTable` 符号和图案可以通过 与 `DynamoDbSchema` 符号.

### `batchGet`

从一个或多个表格中从100个或以下批次中获取任何项目 页:1 未处理的读取在指数增长后重新测试 以表格为基础的备份延迟.

需要两个参数:

-   要获取的项目的可流动( 同步或同步) 。 每个项目必须是 通过属性访问表名的类 与 `DynamoDbTable` 符号和图案可以通过 与 `DynamoDbSchema` 符号.
    
-   (备选) 指定以下任一选项的对象:
    
    -   `readConsistency` - 指定 `'strong'` 执行一贯的 读取。 指定 `'eventual'` (默认)最终执行 一致读取.
        
    -   `perTableOptions` - 一个按键为表格名称和值的对象 是指定下列任一选项的对象:
        
        -   `readConsistency` - 指定 `'strong'` 强力执行 一致读取。 指定 `'eventual'` (默认)履行 最终一致读取.
            
        -   `projection` - 一个投影表达式,指示 DynamoDB 返回 a 获取项目属性的子集。 请参看 联合国 `@aws/dynamodb-expressions` 软件包 关于创建投影表达式对象的指导.
            
        -   `projectionSchema` - 绘制所供应的地图时所用的计划 `projection` 选项.
            
            只有当批次包含来自 映射到 _不变_ 表格使用 _不同_ 属性名称,以代表相同的 DynatomDB 属性.
            
            如果未提供,则与第一个项目有关的计划 与某一表格相联的表格将取而代之.
            

### `batchPut`

在25个或25个以下项目的批次中,将任何数量的项目放在一个或多个表格中. 未处理的插座在逆向延迟指数上升后重新测试 以表方式适用.

返回已投放的可同步项目(产出项目) 被DynamoDB接受时 其结果可以用 `for-await-of` 循环。 如果您正在使用类型脚本, 您需要包含 `esnext.asynciterable` 在你身边 `lib` 声明(以及授权) `downlevelIteration` 如果目标为ES5或更低。 请参考 [类型脚本 发布注释](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-3.html#async-iteration) 更多信息.

需要一个参数 :

-   可移动(同步或同步)的项目。 每个项目必须是 通过属性访问表名的类 与 `DynamoDbTable` 符号和图案可以通过 与 `DynamoDbSchema` 符号.

### `batchWrite`

在25个批次中,将任何数量的项目放在一个或多个表格中,或 东西少了 未处理的书写在指数化后被重审 增加每表适用的后退延迟.

返回字符串“ put” QQ“ delete” 和项目在上方的同位素 已执行指定的写出动作。 其结果可以用 (单位:千美元) `for-await-of` 循环。 如果您正在使用类型脚本, 您需要包含 `esnext.asynciterable` 在你身边 `lib` 声明(以及授权) `downlevelIteration` 如果目标为ES5或更低。 请参考 [类型脚本 发布注释](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-3.html#async-iteration) 更多信息.

需要一个参数 :

-   串起的可移动( 同步或同步) 二联体 “ put ” 和用于执行指定写动作的项目 . 每个项目必须是一个有表格名称的类的例子,可以通过 与 `DynamoDbTable` 符号和可访问的计划 通过与该财产有关的财产 `DynamoDbSchema` 符号.

### `delete`

从 DynamoDB 表格中删除项目。 需要两个参数:

-   拟删除的项目 。 一定是一个有表格名的类的例子 可通过与该财产相关的财产获取 `DynamoDbTable` 符号和 a 计划可通过下列财产获取: `DynamoDbSchema` 符号.
    
-   (备选) 指定以下任一选项的对象:
    
    -   `condition` - 条件表达,其主张必须满足于 命令执行删除操作。 请参看 联合国 `@aws/dynamodb-expressions` 指导软件包 以创建条件表达式对象.
        
    -   `returnValues` - 指定 `'ALL_OLD'` 将删除的项目返回到 当删除操作完成时,您会看到.
        
    -   `skipVersionCheck` - 是否放弃创建条件表达式 根据定义 `versionAttribute` 在计划.
        

### `get`

从 DynamoDB 表格获取项目 。 如果没有带指定密钥的项目 找到后, 返回的诺言将因错误被拒绝 。 需要两个 参数 :

-   取来之物. 一定是一个有表格名的类的例子 可通过与该财产相关的财产获取 `DynamoDbTable` 符号和 a 计划可通过下列财产获取: `DynamoDbSchema` 符号.
    
    提供的物品 **没有** 更新。 相反,一个新的项目是: 与DynamomoDB表格数据相同的类将返回.
    
-   (备选) 指定以下任一选项的对象:
    
    -   `readConsistency` - 指定 `'strong'` 执行一贯的 读取。 指定 `'eventual'` (默认)最终执行 一致读取.
        
    -   `projection` - 一个投影表达式,指示 DynamoDB 返回 a 获取项目属性的子集。 请参看 联合国 `@aws/dynamodb-expressions` 指导软件包 用于创建投影表达式对象.
        

### `put`

将项目插入到 DynamomDB 表格。 需要两个参数:

-   待插入的项目。 一定是一个有表格名的类的例子 可通过与该财产相关的财产获取 `DynamoDbTable` 符号和 a 计划可通过下列财产获取: `DynamoDbSchema` 符号.
    
-   (备选) 指定以下任一选项的对象:
    
    -   `condition` - 条件表达,其主张必须满足于 命令执行放置操作。 请参看 联合国 `@aws/dynamodb-expressions` 指导软件包 以创建条件表达式对象.
        
    -   `returnValues` - 指定 `'ALL_OLD'` 以覆盖项目(如果 当操作完成后.
        
    -   `skipVersionCheck` - 是否放弃创建条件表达式 根据定义 `versionAttribute` 在计划.
        

### `query`

根据主键从表格或索引中获取多个值 属性。 查询必须针对单个分区密钥值, 但可能读取 多个有不同范围密钥的项目.

这种方法作为同步执行器执行,结果可以被消耗 带有 `for-await-of` 循环。 如果您正在使用类型脚本, 您需要 包含 `esnext.asynciterable` 在你身边 `lib` 声明(以及授权) `downlevelIteration` 如果目标为ES5或更低。 请参考 [类型脚本 发布注释](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-3.html#async-iteration) 更多信息.

需要三个参数:

-   用于操作返回的任何结果的构造器函数 . 必须有原型,通过确认的属性可访问表格名称 与 `DynamoDbTable` 符号和通过属性可访问的计划 与 `DynamoDbSchema` 符号.
    
-   指定要由 查询操作。 您可以提供匹配到 值必须相等,匹配散列键到 `ConditionExpressionPredicate`s,或完全构成 `ConditionExpression`。 。 。 . 如果提供散列,它可能包含条件表达的混合物 上游和精确值匹配:
    
    ```typescript
    import {between} from '@aws/dynamodb-expressions';
    
    const keyCondition = {
        partitionKey: 'foo',
        rangeKey: between(10, 99),
    };
    ```
    

```
The key condition must target a single value for the partition key.

Please refer to the documentation for the `@aws/dynamodb-expressions`
package for guidance on creating condition expression objects.
```

-   (备选) 指定以下任一选项的对象:
    
    -   `filter` - DynamomDB 在查询后应用的条件表达式 操作,但在数据返回之前。 非项目 满足 `filter` 标准不返回.
        
        您无法根据分区键或排序定义过滤表达式 键.
        
        请参看文件E/CN.4/Sub.2/2000/L.61 `@aws/dynamodb-expressions` 关于创建条件表达式对象的指针软件包.
        
    -   `indexName` - 执行此查询的索引名称. 如果没有指定,则将对照基准表执行查询.
        
    -   `limit` - 返回物品的最大数量.
        
    -   `pageSize` - 归还物品的最大数量 **每页结果**。 。 。 .
        
    -   `projection` - 一个投影表达式,指示 DynamoDB 返回 a 任何已获取项目属性的子集。 请参看 联合国 `@aws/dynamodb-expressions` 指导软件包 用于创建投影表达式对象.
        
    -   `readConsistency` - 指定 `'strong'` 执行一贯的 读取。 指定 `'eventual'` (默认)最终执行 一致读取.
        
    -   `scanIndexForward` - 指定索引倒转顺序: 如果真是这样的话 转弯按上升顺序进行;如果错误,转弯是 按降序进行.
        
    -   `startKey` - 第一项行动的主要关键 评估.
        

#### 查询元数据

路人回来了 `query` 将跟踪项目数量 和通过委员会 `count` 财务报告和审定财务报表 `scannedCount` 属性 :

```typescript
const iterator = mapper.query(
    MyClass, 
    {partitionKey: 'foo', rangeKey: between(0, 10)}
);
for await (const record of iterator) {
    console.log(record, iterator.count, iterator.scannedCount);
}
```

#### 倾斜

如果您想要执行一个可重复的查询, 您可以使用 `.pages()` 方法 移动器返回 `query` 以访问内在的受孕者。 这个 平生器与活取器的不同之处在于 它产生出数组无相 记录和记录 `lastEvaluatedKey` 可提供给新的 呼叫 `mapper.query` 以稍后或单独程序恢复查询:

```typescript
const paginator = mapper.query(
    MyClass,
    {partitionKey: 'foo', rangeKey: between(0, 10)},
    {
        // automatically stop after 25 items or the entire result set has been
        // fetched, whichever is smaller
        limit: 25
    }
).pages();

for await (const page of paginator) {
    console.log(
        paginator.count,
        paginator.scannedCount,
        paginator.lastEvaluatedKey
    );
}

const newPaginator = mapper.query(
    MyClass,
    {partitionKey: 'foo', rangeKey: between(0, 10)},
    {
        // start this new paginator where the previous one stopped
        startKey: paginator.lastEvaluatedKey
    }
).pages();
```

### `scan`

检索表格或索引中的所有值.

这种方法作为同步执行器执行,结果可以被消耗 带有 `for-await-of` 循环。 如果您正在使用类型脚本, 您需要 包含 `esnext.asynciterable` 在你身边 `lib` 声明(以及授权) `downlevelIteration` 如果目标为ES5或更低。 请参考 [类型脚本 发布注释](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-3.html#async-iteration) 更多信息.

需要两个参数:

-   用于操作返回的任何结果的构造器函数 . 必须有原型,通过确认的属性可访问表格名称 与 `DynamoDbTable` 符号和通过属性可访问的计划 与 `DynamoDbSchema` 符号.
    
-   (备选) 指定以下任一选项的对象:
    
    -   `filter` - 扫描后DynamotB应用的条件表达式 操作,但在数据返回之前。 非项目 满足 `filter` 标准不返回.
        
        您无法根据分区键或排序定义过滤表达式 键.
        
        请参看文件E/CN.4/Sub.2/2000/L.61 `@aws/dynamodb-expressions` 关于创建条件表达式对象的指针软件包.
        
    -   `indexName` - 执行此查询的索引名称. 如果没有指定,则将对照基准表执行查询.
        
    -   `limit` - 返回物品的最大数量.
        
    -   `pageSize` - 归还物品的最大数量 **每页结果**。 。 。 .
        
    -   `projection` - 一个投影表达式,指示 DynamoDB 返回 a 任何已获取项目属性的子集。 请参看 联合国 `@aws/dynamodb-expressions` 指导软件包 用于创建投影表达式对象.
        
    -   `readConsistency` - 指定 `'strong'` 执行一贯的 读取。 指定 `'eventual'` (默认)最终执行 一致读取.
        
    -   `segment` - 此段的标识符( 如果此扫描是) 作为平行扫描操作的一部分进行).
        
    -   `startKey` - 第一项行动的主要关键 评估.
        
    -   `totalSegments` - 扫描的片段数 分割( 如果此扫描作为平行扫描的一部分进行) 操作).
        

#### 扫描元数据

路人回来了 `scan` 将跟踪项目数量 和通过委员会 `count` 财务报告和审定财务报表 `scannedCount` 属性 :

```typescript
const iterator = mapper.scan(MyClass);
for await (const record of iterator) {
    console.log(record, iterator.count, iterator.scannedCount);
}
```

#### 倾斜

如果想要进行可重复的扫描,可以使用 `.pages()` 方法 移动器返回 `scan` 以访问内在的受孕者。 这个 平生器与活取器的不同之处在于 它产生出数组无相 记录和记录 `lastEvaluatedKey` 可提供给新的 呼叫 `mapper.scan` 稍后或另作一个过程恢复扫描:

```typescript
const paginator = mapper.scan(
    MyClass,
    {
        // automatically stop after 25 items or the entire result set has been
        // fetched, whichever is smaller
        limit: 25
    }
).pages();
for await (const page of paginator) {
    console.log(
        paginator.count,
        paginator.scannedCount,
        paginator.lastEvaluatedKey
    );
}

const newPaginator = mapper.scan(
    MyClass,
    {
        // start this new paginator where the previous one stopped
        startKey: paginator.lastEvaluatedKey
    }
).pages();
```

### `parallelScan`

通过将表格分为块来获取表格中的所有值,所有 它们平行扫描.

这种方法作为同步执行器执行,结果可以被消耗 带有 `for-await-of` 循环。 如果您正在使用类型脚本, 您需要 包含 `esnext.asynciterable` 在你身边 `lib` 声明(以及授权) `downlevelIteration` 如果目标为ES5或更低。 请参考 [类型脚本 发布注释](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-3.html#async-iteration) 更多信息.

需要三个参数:

-   用于操作返回的任何结果的构造器 。 一定有个 使用表格名称的原型,可通过与表格名称相关的属性访问 `DynamoDbTable` 符号和计划,可通过识别属性访问 与 `DynamoDbSchema` 符号.
    
-   用来扫描表格的平行工人总数.
    
-   (备选) 指定以下任一选项的对象:
    
    -   `filter` - 扫描后DynamotB应用的条件表达式 操作,但在数据返回之前。 非项目 满足 `filter` 标准不返回.
        
        您无法根据分区键或排序定义过滤表达式 键.
        
        请参看文件E/CN.4/Sub.2/2000/L.61 `@aws/dynamodb-expressions` 关于创建条件表达式对象的指针软件包.
        
    -   `indexName` - 执行此查询的索引名称. 如果没有指定,则将对照基准表执行查询.
        
    -   `pageSize` - 归还物品的最大数量 **每页结果**。 。 。 .
        
    -   `projection` - 一个投影表达式,指示 DynamoDB 返回 a 任何已获取项目属性的子集。 请参看 联合国 `@aws/dynamodb-expressions` 指导软件包 用于创建投影表达式对象.
        
    -   `readConsistency` - 指定 `'strong'` 执行一贯的 读取。 指定 `'eventual'` (默认)最终执行 一致读取.
        
    -   `startKey` - 第一项行动的主要关键 评估.
        

#### 扫描元数据

路人回来了 `parallelScan` 将跟踪项目数量 和通过委员会 `count` 财务报告和审定财务报表 `scannedCount` 属性 :

```typescript
const iterator = mapper.parallelScan(MyClass, 4);
for await (const record of iterator) {
    console.log(record, iterator.count, iterator.scannedCount);
}
```

#### 倾斜

如果你想进行可重复的平行扫描,可以使用 `.pages()` 乘车返回的方法 `parallelScan` 访问基础 彼金刚者. 活化器与活化器的不同之处在于 它产生数组 未经核实的记录和记录 `scanState` 可提供的财产 新呼吁 `mapper.parallelScan` 稍后或单独恢复扫描 进程 :

```typescript
const paginator = mapper.parallelScan(
    MyClass,
    4
).pages();
for await (const page of paginator) {
    console.log(
        paginator.count,
        paginator.scannedCount,
        paginator.lastEvaluatedKey
    );

    break;
}

const newPaginator = mapper.parallelScan(
    MyClass,
    4,
    {
        // start this new paginator where the previous one stopped
        scanState: paginator.scanState
    }
).pages();
```

### `update`

在 DynamoDB 表格中更新项目。 将留下未定义的属性 计划就绪.

需要两个参数:

-   具有理想财产状态的物品. 一定是个班级 表格名称可通过与该表格相关的属性访问 `DynamoDbTable` 符号和图案,可通过与该表所示的属性连接 `DynamoDbSchema` 符号.
    
-   (备选) 指定以下任一选项的对象:
    
    -   `condition` - 条件表达,其主张必须满足于 命令执行更新操作。 请参看 联合国 `@aws/dynamodb-expressions` 指导软件包 以创建条件表达式对象.
        
    -   `onMissing` - 指定 `'remove'` (缺省)处理无 提供的数值 `item` 作为将财产从 在DynamoDB的纪录。 指定 `'skip'` 只更新属性 中定义 `item`。 。 。 .
        
    -   `skipVersionCheck` - 是否放弃创建条件表达式 根据定义 `versionAttribute` 在计划.
        

### `executeUpdateExpression`

执行自定义更新表达式。 这个方法会 **没有** 自动 应用版本检查,因为正在更新对象的当前状态不是 已经知道.

需要四个参数:

-   要执行的表达式 。 请参看文件E/CN.4/Sub.2/2000/L.61 `@aws/dynamodb-expressions` 用于创建更新指南的软件包 表达式对象.
    
-   正在更新的项目密钥 .
    
-   该类的构造器映射到该表达式的表格中 应该运行。 必须有原型,通过一个 与 `DynamoDbTable` 符号和可访问的计划 通过与该财产有关的财产 `DynamoDbSchema` 符号.
    
-   (备选) 指定以下任一选项的对象:
    
    -   `condition` - 条件表达,其主张必须满足于 命令执行更新操作。 请参看 联合国 `@aws/dynamodb-expressions` 指导软件包 以创建条件表达式对象.

## 常见问题

### @aws/dynamodb-data-mapper 是什么？

Amazon DynamoDB 基于计划的数据映射器

### 如何安装 @aws/dynamodb-data-mapper？

在项目目录运行 npm install @aws/dynamodb-data-mapper，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：aws-sdk（^2\.7\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @aws/dynamodb-data-mapper 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @aws/dynamodb-data-mapper 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @aws/dynamodb-data-mapper 可以商用吗？

@aws/dynamodb-data-mapper 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @aws/dynamodb-data-mapper 的下载量有多少？

根据 npm 官方下载统计，@aws/dynamodb-data-mapper 在 2026/10/08 – 2026/11/06 这 30 天内被下载 86,247 次，日均约 2,875 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @aws/dynamodb-data-mapper 还在维护吗？

最新版本 0\.7\.3 发布于 2018/08/16（8 年前）；至今共发布 17 个版本，其中过去 12 个月发布了 0 个；首次发布于 2017/11/21。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

