NestJS,在DTO中序列化bigint参数

NestJS, serialise bigint parameters in DTO

我的 DTO 的参数类型为 bigint。目前,当我收到这些 DTO 时,所有这些 pramates 的类型总是 string。这是示例:

@Get("")
async foo(@Query() query: Foo) {
    console.log(typeof Foo.amount) //string
}

我的 DTO:

export class Foo { 
    amount: bigint;
}

如何让它工作并具有 bigint 类型的 amount

在你的 DTO 中:

import { Transform } from 'class-transformer';

//...

export class Foo { 
    @Transform(val => BigInt(val.value))
    amount: bigint;
}

也在你的控制器中:

import {ValidationPipe} from '@nestjs/common';

//...

@Get("")
async foo(@Query(new ValidationPipe({ transform: true })) query: Foo) {
    console.log(typeof Foo.amount) //should be bigint
}

发生了什么:

ValidationPipe 是 NestJS 中的默认管道,它使用反射使用 Foo DTO class 中定义的规则验证查询 属性。选项 transform: true 将转换即;在 @Transform 装饰器中执行函数并将原始值替换为转换后的值(在您的情况下为 val => BigInt(val))。

这会将字符串化的“bigint”转换为原始的“bigint”。

编辑: 更新了 Transform 装饰器中的函数以匹配 class-transformer v0.4.0