1

根据文档Date对象应转换为string

请注意,当您尝试将类对象转换为普通对象时,日期将被转换为字符串。

我的带有类转换0.2.3器的示例代码无法按预期工作:

class TestDate {
  @Type(() => Date)
  aDate!: Date;
}

  const testDate = new TestDate();
  testDate.aDate = new Date();
  const result: any = classToPlain(testDate);
  console.log(typeof result.aDate);

这会打印object到控制台,但我希望string.
我错过了什么?

4

2 回答 2

4

为了扩展 TmTron 的答案,我需要创建两个变压器 - 每个方向一个。然后我使用这种技术将它们组合成一个装饰器:

// TransformDate.ts
import { Transform } from "class-transformer";

export default function TransformDate() {
  const toPlain = Transform((value) => (value as Date).toISOString(), {
    toPlainOnly: true,
  });

  const toClass = Transform((value) => new Date(value), {
    toClassOnly: true,
  });

  return function (target: any, key: string) {
    toPlain(target, key);
    toClass(target, key);
  };
}

用法:

// User.ts
import TransformDate from './TransformDate';

export default class User {
  id: string;
  @TransformDate()
  createdDate: Date;
  // ...
}
于 2020-05-11T14:49:03.323 回答
2

文档中的以下句子是错误的(参见class-transformer#326):

请注意,当您尝试将类对象转换为普通对象时,日期将被转换为字符串。

解决方案是使用@Transform

  @Transform(value => (value as Date).toISOString(), {
    toPlainOnly: true
  })

带有解决方法的 Codesandbox 示例

于 2020-02-05T09:18:02.160 回答