#typescript #class-transformer
#typescript #class-transformer
Вопрос:
Предположим, у меня есть json:
{"firstName": "Mike", "age": 35}
И класс:
export class Person {
private firstName: StringProperty = new SimpleStringProperty();
private age: IntegerProperty = new SimpleIntegerProperty();
public constructor() {
//does nothing
}
public setFirstName(firstName: string): void {
this.firstName.set(firstName);
}
public getFirstName(): string {
return this.firstName.get();
}
public setAge(age: number): void {
this.age.set(age);
}
public getAge(): number {
return this.age.get();
}
}
Могу ли я заставить class-transformer использовать геттеры / сеттеры при преобразовании в / из json?
Ответ №1:
Ну, вы можете сделать это в основном с помощью Object.assign
, но вам нужно использовать фактические геттеры и сеттеры, как показано ниже :
const json = {"firstName": "Mike", "age": 35};
class Person {
private _firstName: string |null = null;
private _age: number |null = null;
public constructor() {
//does nothing
}
public set firstName(firstName: string|null) {
// some logic
this._firstName = firstName;
}
public get firstName(){
// some logic
return this._firstName;
}
public set age(age: number |null) {
// some logic
this._age = age;
}
public get age(){
// some logic
return this._age;
}
}
var person = new Person();
Object.assign(person,json);
console.log(person);
console.log(person.firstName,person.age);
Редактировать: это может быть опасно, если свойства исходного json отличаются от целевого класса. Это может добавить некоторые дополнительные свойства к экземпляру, который не виден для системы ввода. Поэтому вы можете захотеть использовать Object.seal
метод.
Ссылка на игровую площадку