场景一:方法将普通javascript对象转换为特定类的实例
解决方案
首先我们先定义一个想要指定的特定的类如下:
User里面包含属性id,fistname,lastname,age,data和它的构造方法,还有特定的方法getName和isAdult。
class User {
id: number;
firstName: string;
lastName: string;
age: number;
date?: Date;
constructor() {
this.id = 0;
this.firstName = "";
this.lastName = "";
this.age = 0;
}
getName() {
return this.firstName + ' ' + this.lastName;
}
isAdult() {
return this.age > 18 && this.age < 60;
}
}
我们在前端处理后端传送过来的数据时,经过反序列化转换的对象全是plain(literal) object(普通(字面量)对象),如下,这里我们手动写一个待转换成特定对象的 JavaScript对象(JSON形式)。
interface UserJson {
id: number,
firstName: string,
lastName: string,
age: number,
date?: Date
}
const userJson:UserJson = {
id: 1,
firstName: "Johny",
lastName: "Cage",
age: 27,
date: new Date()
}
使用class-transform可以直接将收到的userJson字面量对象转换为User实例对象,进而可以使用其中的方法。
使用plainToInstance(将字面量转为类实例,支持数组转换)这个接口来进行转化对应实例。
plainToInstance第一个参数传入特定的实体类,第二个传入需要转换的js对象。
export function test1() {
// JSON转为对象
const use