Если вы примените ParseIntPipe
к параметру id
, он будет преобразовывать только id
, но не свойство id
из params
, здесь оно останется string
.
Вместо этого вы можете использовать class-transformer
для преобразования вашего параметра в number
:
import { Transform } from 'class-transformer';
export class CreateDataParams {
@Transform(id => parseInt(id), {toClassOnly: true})
id: number;
}
Затем вы используете ValidationPipe
с опцией transform: true
:
@Post(':id')
@UsePipes(new ValidationPipe({transform: true}))
async create(
@Param() params: CreateDataParams,
@Body() createDto: CreateDto
) {
// params.id
}
Обратите внимание, что это небезопасно, например, потому что parseInt('5abc010')
- это 5
. Так что вы можете захотеть сделать дополнительные проверки в вашей функции преобразования.