# ClassTransformOptions

**Kind:** Interface

**Source:** [`packages/common/interfaces/external/class-transform-options.interface.ts`](https://github.com/nestjs/nest/blob/master/packages/common/interfaces/external/class-transform-options.interface.ts#L8)

**Part of:** [Common](subsystem-packages-common)

Options to be passed during transformation.

`ClassTransformOptions` defines configuration passed to class transformation operations, such as converting plain objects into class instances or serializing instances into plain data. It controls property exposure rules, groups, versioning, decorator behavior, circular-reference handling, and implicit type conversion.

## Properties

| Property | Type |
|---|---|
| `strategy` | `'excludeAll' | 'exposeAll'` |
| `groups` | `string[]` |
| `version` | `number` |
| `excludePrefixes` | `string[]` |
| `ignoreDecorators` | `boolean` |
| `targetMaps` | `any[]` |
| `enableCircularCheck` | `boolean` |
| `enableImplicitConversion` | `boolean` |
| `excludeExtraneousValues` | `boolean` |
| `exposeDefaultValues` | `boolean` |
| `exposeUnsetFields` | `boolean` |

## Diagram

```mermaid
graph LR
  A[Transformation Operation] --> B[ClassTransformOptions]
  B --> C[strategy<br/>excludeAll | exposeAll]
  B --> D[groups and version]
  B --> E[excludePrefixes]
  B --> F[Decorator Controls]
  B --> G[Type Conversion]
  B --> H[Circular Reference Check]
  B --> I[Target Maps]
  
  F --> F1[ignoreDecorators]
  F --> F2[excludeExtraneousValues]
  F --> F3[exposeDefaultValues]
  G --> G1[enableImplicitConversion]
```

## Usage

```ts
import { plainToInstance } from 'class-transformer';
import type { ClassTransformOptions } from '@nestjs/common';

class CreateUserDto {
  name: string;
  age: number;
}

const options: ClassTransformOptions = {
  strategy: 'excludeAll',
  enableImplicitConversion: true,
  excludeExtraneousValues: true,
  groups: ['create'],
  version: 1,
};

const payload = {
  name: 'Ada Lovelace',
  age: '36',
  internalToken: 'do-not-expose',
};

const user = plainToInstance(CreateUserDto, payload, options);

// With implicit conversion enabled, age can be converted to a number.
console.log(user.age);
```

## AI Coding Instructions

- Pass `ClassTransformOptions` to transformation utilities consistently when converting request payloads, DTOs, or response objects.
- Use `excludeExtraneousValues` with explicit exposure decorators to prevent undeclared input properties from being included.
- Enable `enableImplicitConversion` only when automatic primitive conversion is intended; validate transformed values separately.
- Use `groups` and `version` to support context-specific or versioned serialization without duplicating DTO classes.
- Enable `enableCircularCheck` for object graphs that may contain circular references, noting that it can add processing overhead.
