plainToClass не преобразует дату в строку
Согласно Документах а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
.
Что мне не хватает?
2 ответа
Следующее предложение в документации неверно (см. Преобразователь классов #326):
Обратите внимание, что даты будут преобразованы в строки, когда вы попытаетесь преобразовать объект класса в простой объект.
Решение - использовать @Transform
:
@Transform(value => (value as Date).toISOString(), {
toPlainOnly: true
})
Чтобы расширить ответ 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;
// ...
}