# @automapper/classes

> AutoMapper TypeScript Classes strategy

Latest version **9.0.2** (published 2026-07-16) · MIT license · 0 weekly downloads

## Install

```sh
npm install @automapper/classes
pnpm add @automapper/classes
yarn add @automapper/classes
bun add @automapper/classes
```

## Health

**Score 60/100 (C)** — status: active.

Positive: has types; esm support; no vulnerabilities; high maintenance score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 9.0.2 |
| Published | 2026-07-16 |
| First published | 2021-01-04 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Node | >=20.0.0 |
| Dependencies | 0 |
| Unpacked size | 28.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1007 |
| Author | Chau Tran |
| Maintainers | nartc |
| Keywords | typescript, automapper, mapper, nx |

## Links

- npm: https://www.npmjs.com/package/@automapper/classes
- Repository: https://github.com/nartc/mapper.git#main
- Homepage: https://github.com/nartc/mapper/tree/main#readme
- Issues: https://github.com/nartc/mapper/issues
- npm.io page: https://npm.io/package/@automapper/classes

## Alternatives

- [@openai/codex-sdk](https://npm.io/package/@openai/codex-sdk.md) — 731.4K weekly downloads
- [babel-plugin-transform-react-jsx](https://npm.io/package/babel-plugin-transform-react-jsx.md) — 565.0K weekly downloads
- [babel-helper-remove-or-void](https://npm.io/package/babel-helper-remove-or-void.md) — 508.5K weekly downloads
- [@pnpm/store-controller-types](https://npm.io/package/@pnpm/store-controller-types.md) — 186.9K weekly downloads
- [react-native-signature-canvas](https://npm.io/package/react-native-signature-canvas.md) — 155.6K weekly downloads

## Recent versions

- 9.0.2 (latest) — 2026-07-16
- 9.0.0-alpha.1 (beta) — 2026-06-24
- 9.0.1 — 2026-07-15
- 9.0.0 — 2026-07-15
- 9.0.0-alpha.0 — 2026-06-23
- 8.8.1 — 2024-01-23
- 8.8.0 — 2024-01-22
- 8.7.7 — 2022-10-25
- 8.7.6 — 2022-08-31
- 8.7.5 — 2022-08-03
- 8.7.4 — 2022-08-02
- 8.7.3 — 2022-08-02
- 8.7.2 — 2022-07-31
- 8.7.1 — 2022-07-29
- 8.7.0 — 2022-07-27
- … 131 more at https://npm.io/package/@automapper/classes/versions

## README

# @automapper/classes

This is the official strategy from `@automapper` to work with TS/ES6 Class

## Installation

```sh
npm i @automapper/classes
```

or with `yarn`:

```sh
yarn add @automapper/classes
```

### `peerDependencies`

`@automapper/classes` depends on `@automapper/core` and `reflect-metadata`.

```sh
npm i @automapper/core reflect-metadata
```

or with `yarn`:

```sh
yarn add @automapper/core reflect-metadata
```

## Usage

`@automapper/classes` provides `classes` as a `MappingStrategyInitializer`. Pass `classes()` to `createMapper` to create
a `Mapper` that uses `classes` strategy.

```ts
import { classes, AutoMap } from '@automapper/classes';
import { createMapper, createMap, forMember, mapFrom } from '@automapper/core';

const mapper = createMapper({
  ...,
  strategyInitializer: classes()
});

class User {
    @AutoMap()
    firstName: string;
    @AutoMap()
    lastName: string;

    constructor(firstName: string, lastName: string) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

class UserDto {
  @AutoMap()
  firstName: string;
  @AutoMap()
  lastName: string;
  @AutoMap()
  fullName: string;
}

createMap(
    mapper,
    User,
    UserDto,
    forMember(
        d => d.fullName,
        mapFrom(s => s.firstName + ' ' + s.lastName)
    )
);
mapper.map(new User('Auto', 'Mapper'), User, UserDto);
// UserDto { firstName: 'Auto', lastName: 'Mapper', fullName: 'Auto Mapper' }
```

## Customization

`classes()` accepts two optional parameters:

-   `destinationConstructor`: how to construct the `Destination`. This is the default `destinationConstructor` that will be used on `mapper.mapXXXX()` operations. `DestinationConstructor` is a function with the following signature:

    ```ts
    export type DestinationConstructor<
        TSource extends Dictionary<TSource> = any,
        TDestination extends Dictionary<TDestination> = any
    > = (
        sourceObject: TSource, // the sourceObject used to map to the Destination
        destinationIdentifier: MetadataIdentifier<TDestination> // the Destination model
    ) => TDestination;

    // example
    mapper.map(user, User, UserDto);
    // sourceObject will be "user"
    // destinationIdentifier will be "UserDto"
    // This allows you to provide a default constructor that can be based on the Source object data
    ```

    -   There is a way to provide one-off custom `destinationConstructor` to any given `Mapping` when you run `createMap`. Read more about [constructUsing](https://automapperts.netlify.app/docs/plugins-system/introduce-to-classes)

-   `applyMetadata`: how the strategy should apply the metadata to a model. The default should work for most cases but if you would like to customize this, you can. `ApplyMetadata` is a function with the following signature:

    ```ts
    export type ApplyMetadataFn = <TModel extends Dictionary<TModel>>(
        model: MetadataIdentifier<TModel>
    ) => TModel;

    export type ApplyMetadata = (
        strategy: MappingStrategy<MetadataIdentifier>
    ) => ApplyMetadataFn;

    // for example
    const customApplyMetadata: ApplyMetadata = (strategy: MappingStrategy) => {
        // strategy contains the Mapper which stores all the models' metadata
        return (model) => {
            // based on this model, you can extract the metadata and do as you like

            return anObjectThatHasTheMetadataApplied; // { foo: undefined, bar: undefined }
        };
    };
    ```

Read more about this strategy on [classes documentation](https://automapperts.netlify.app/docs/plugins-system/introduce-to-classes)

---
_Source: https://npm.io/package/@automapper/classes · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
