前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >class-transformer的使用

class-transformer的使用

原创
作者头像
挥刀北上
修改2024-04-22 08:59:11
9720
修改2024-04-22 08:59:11
举报
文章被收录于专栏:Node.js开发
class-transformer
class-transformer

上篇文章介绍了如何使用class-validator验证数据,接下来我们接着聊class-transformer的使用。

class-transformer直接翻译的意思就是类的转换,其实这里转换的不是类,而是对象,目的是将字面量对象转化为相应的类生成的对象,然后就可以使用class-validator验证了。

class-transformer本质上实现字面量对象plain object和类实例对象instance of class之间的转换,看如下代码:

首先我们来区分一下plain(literal) object和class(constructor) objects:

代码语言:typescript
复制
 // literal
 const literralObj = {
   name: 'li',
   age: 18
 }
 // class
 class User {
   constructor(public name: string, public age: number){
     this.name = name
     this.age = age
   }
 }
 const user = new User('jing', 20)

plain(literal) object是通过{ ... }直接定义出来的,class(constructor) objects是通过类new出来的。

我们在前端处理后端传送过来的数据时,经过反序列化转换的对象全是plain(literal) object,如下:

代码语言:json
复制
 {
   "id": 1,
   "firstName": "Johny",
   "lastName": "Cage",
   "age": 27
 },

我们在前端定义了User类:

代码语言:js
复制
 export class User {
   id: number;
   firstName: string;
   lastName: string;
   age: number;
   
   getName() {
     return this.firstName + ' ' + this.lastName;
   }
   
   isAdult() {
     return this.age > 36 && this.age < 60;
   }
 }

我们在前端接收数据的时候,可以使用ts语法显示标注接收对象的类型,可以给我们属性提示,但是我们没法使用User类给我们提供的方法!

代码语言:js
复制
 fetch('user.json').then((user: User) => {
   // you can use user here, and type hinting also will be available to you,
   //  but user is not actually instance of User class
   // this means that you can't use methods of User class
   
   // error!
   user.getName()
   user.isAdult()
 });

如果我们想要相关的方法,那必须重建整个对象,复制对应的属性值,这对于一个复杂对象来说很麻烦,且是一件很容易出错的事,如果使用class-transform可以直接将收到的user字面量对象转换为User实例对象,进而可以使用其中的方法

代码语言:js
复制
 fetch('user.json').then((user: Object) => {
   const realUsers = plainToClass(Use, user);
   // now user is an instance of User class
 });

以上便是class-transformer的使用,希望对你有所帮助

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档