@ApiPropertyObject
Describes nested object fields in DTOs. Works with single DTO types, arrays, polymorphic discriminators, or dynamically generated DTOs. Handles both Swagger documentation and class-validator/class-transformer setup.
Signature
@ApiPropertyObject(properties: TApiPropertyObjectProperties)Key options
| Option | Description |
|---|---|
type | Either a single DTO class, an array of DTOs (for polymorphic oneOf), or a dynamically generated DTO registry. |
discriminator | Optional { propertyName, mapping, shouldKeepDiscriminatorProperty } enabling OpenAPI discriminators and runtime validation. Required when supplying multiple types. |
shouldValidateNested | Adds ValidateNested and Type decorators so nested objects are validated/serialized. Mandatory for request-side arrays. |
isArray, minItems, maxItems, isUniqueItems | Enables arrays with validation. |
additionalProperties | Pass-through for arbitrary JSON object schemas. |
Behavior
- Calls
RegisterAutoDtoChildso generated DTOs are discoverable inside auto contexts. - Emits
@ApiPropertywithtype,oneOf, ordiscriminatormetadata. Allows arrays andadditionalProperties. - Adds
Type,ValidateNested,IsOptional,IsArray,ArrayMinSize,ArrayMaxSize, andArrayNotEmptyas needed. - Supports polymorphic validation via
MustMatchOneOfSchemasValidator. - Adds
ApiResponseProperty,Expose, orExcludefor response DTOs.
Example
class AddressDto {
/* ... */
}
class BillingAddressDto extends AddressDto {
/* ... */
}
class ShippingAddressDto extends AddressDto {
/* ... */
}
class OrderDto {
@ApiPropertyObject({
entity: () => OrderEntity,
description: "Address payload",
type: [BillingAddressDto, ShippingAddressDto],
discriminator: {
propertyName: "type",
mapping: {
billing: BillingAddressDto,
shipping: ShippingAddressDto,
},
shouldKeepDiscriminatorProperty: true,
},
shouldValidateNested: true,
})
address!: BillingAddressDto | ShippingAddressDto;
}Related resources
Last updated on