在响应 DTO 中公开自定义 getter 不起作用

Foo*_*Bar 5 javascript typescript class-transformer

我尝试定义一个像这样的自定义 getter:

import { Expose } from 'class-transformer';

export class MyDTOResponse {
  @Expose()
  id: string;

  @Expose()
  name: string;

  @Expose()
  get thisIsATest(): string {
    return 'yolo';
  }
}
Run Code Online (Sandbox Code Playgroud)

这就是我改造它的方式:

plainToClass(MyDTOResponse, MyRawDataObject, {
  excludeExtraneousValues: true,
});
Run Code Online (Sandbox Code Playgroud)

如此处文档中所述:https://github.com/typestack/class-transformer#exusing-getters-and-method-return-values

然而,得到的回应却只有:

{
  "id": "f8c213c7-5853-4d01-b424-cb0349a6c580",
  "name": "Clean the kitchen!"
}
Run Code Online (Sandbox Code Playgroud)

我不确定我到底做错了什么,但我缺少“thisIsATest”属性。

小智 1

plainToClass将返回一个实例。如果您使用console.log此实例,则看不到“thisIsATest”属性。您可以尝试以下代码:

const res = plainToClass(MyDTOResponse, MyRawDataObject, {
  excludeExtraneousValues: true,
});

console.log(res.thisIsATest); // yolo

console.log(instanceToPlain(res))
// {
//   id: 'f8c213c7-5853-4d01-b424-cb0349a6c580',
//   name: 'Clean the kitchen!',
//   thisIsATest: 'yolo'
// }
Run Code Online (Sandbox Code Playgroud)

顺便说一句,plainToClass已弃用,请改用该plainToInstance方法。