TypeStack class-transformer 入门指南:对象与类的优雅转换

TypeStack class-transformer 入门指南:对象与类的优雅转换

class-transformer Decorator-based transformation, serialization, and deserialization between objects and classes. class-transformer 项目地址: https://gitcode.com/gh_mirrors/cl/class-transformer

什么是 class-transformer

class-transformer 是一个强大的零依赖工具库,专门用于在类实例和普通对象之间进行双向转换。它完美解决了前端和后端开发中常见的数据转换问题,特别是在处理 API 响应、数据库操作和表单提交等场景时尤为实用。

核心特性

  1. 条件性属性转换:可以根据条件决定是否转换某些属性
  2. 属性排除:轻松排除不需要转换的敏感属性(如密码)
  3. 属性重命名:在转换过程中可以更改属性名称
  4. 全平台支持:同时支持 Node.js 和浏览器环境
  5. Tree-shaking 友好:只打包你实际使用的功能
  6. 零外部依赖:不增加项目体积负担

安装与配置

安装步骤

首先通过 npm 安装必要的包:

npm install class-transformer reflect-metadata

初始化设置

在你的应用程序入口文件的最顶部导入 reflect-metadata

import 'reflect-metadata';
// 其他导入和初始化代码放在这之后

TypeScript 配置

确保你的 tsconfig.json 文件中启用了装饰器元数据支持:

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  }
}

基础使用示例

让我们通过一个用户类的例子来了解基本用法:

import { Expose, Exclude, classToPlain } from 'class-transformer';

class User {
  /**
   * 转换时将 _id 映射为 id
   */
  @Expose({ name: 'id' })
  private _id: string;

  /**
   * 正常暴露 name 属性
   */
  @Expose()
  public name: string;

  /**
   * 排除密码哈希,不包含在转换结果中
   */
  @Exclude()
  public passwordHash: string;
}

// 假设从某处获取用户实例
const user = getUserFromSomewhere();
// 内容: User { _id: '42', name: 'John Snow', passwordHash: '2f55ce082...' }

// 转换为普通对象
const plainUser = classToPlain(user);
// 结果: { id: '42', name: 'John Snow' }

实际应用场景

  1. API 响应处理:将数据库返回的类实例转换为适合API响应的普通对象
  2. 数据脱敏:自动排除敏感字段,如密码、令牌等
  3. 数据标准化:统一前后端字段命名规范
  4. 表单处理:将表单数据转换为类实例进行验证和处理

进阶提示

  • 结合 class-validator 使用可以实现更强大的数据验证功能
  • 可以使用 @Transform 装饰器对属性值进行自定义转换
  • 通过 @Type 装饰器处理嵌套对象的转换

class-transformer 的这些特性使其成为处理复杂数据转换场景的理想选择,特别是当你需要保持代码整洁性和类型安全时。

class-transformer Decorator-based transformation, serialization, and deserialization between objects and classes. class-transformer 项目地址: https://gitcode.com/gh_mirrors/cl/class-transformer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昌隽艳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值