簡體   English   中英

如何使用 class 變壓器轉換字段名稱

[英]How to transform field name using class transformer

我有這個 DTO,當我嘗試將其轉換為 object 時,它不會轉換為我想要的方式。 值轉換為 object 但字段名稱保持不變。

export class CreatePageGroupsDto {

@IsString()
@Expose()
name: string;


@IsString()
@Expose()
url: string;


@IsEnum(CategoryEnum)
@Expose()
category: CategoryEnum;


@Expose({ name: 'page_view' })
@Transform(({
    value = false,
}, ) => {
    const pageView: PageView = { stand_alone: value };
    return pageView;
} )

stand_alone?: boolean;
}

我有這個 DTO,想把它轉換成這樣的 object

{
        'name': 'string',
        'url': 'string',
        'category': 'legal',
        'page_view': {
            stand_alone: false,
        },
    }

如果您有 dto 實例,並且想要將其轉換為 object。 你的代碼是對的。

import { Expose, instanceToPlain, Transform } from 'class-transformer';

class CreatePageGroupsDto {
  @Expose({ name: 'page_view' })
  @Transform(({ value = false }) => {
    const pageView = { stand_alone: value };
    return pageView;
  })
  stand_alone?: boolean;
}

const dto = new CreatePageGroupsDto();
dto.stand_alone = false;

console.log(instanceToPlain(dto));

Output:

{ page_view: { stand_alone: false } }

所以我認為你實際上有一個來自 http 請求的普通 object 。 並且您的框架(例如 Nestjs)將請求 object 轉換為 dto 實例。 這個過程是plainToInstance ,而不是instanceToPlain 您可以嘗試像以下代碼一樣交換page_viewstand_alone

class CreatePageGroupsDto {
  @Expose({ name: 'stand_alone' })
  @Transform(({ value = false }) => {
    const pageView = { stand_alone: value };
    return pageView;
  })
  page_view?: boolean;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM