当前位置: 代码网 > it编程>编程语言>Javascript > TypeScript装饰器之项目数据转换详解

TypeScript装饰器之项目数据转换详解

2024年11月26日 Javascript 我要评论
一、 先来看一张图二、 解释下这张图上图的原始对象, 是后端api接口返回的json数据, 其中有以下的一些问题:接口字段命名方式乱七八糟 驼峰下划线都有有的名称不是我们想要的 比如 descript

一、 先来看一张图

二、 解释下这张图

上图的原始对象, 是后端api接口返回的json数据, 其中有以下的一些问题:

  • 接口字段命名方式乱七八糟 驼峰下划线都有
  • 有的名称不是我们想要的 比如 description 前端想用 remark 来替代
  • 承诺是 数组 的数据返回了 null
  • 后端要求布尔型 1=true 0=false
  • 后端给了错误的数据类型 比如 money 字段该为数字
  • 后端没有 布尔型 数据必须 is 开头的规范,但前端有, 比如 isdisabled
  • 后端突然想把 phonenumber 按他们的习惯改成 user_phone

三、 解决方案

1. baseentity

export class baseentity extends airmodel {
  @type(number) id!: number

  name!: string

  @default('暂无备注')
  @alias('desc') remark!: string
}

2. userentity

@fieldprefix('user_')
export class userentity extends baseentity {
  @type(string)
  @ignoreprefix() phonenumber!: string

  @tojson((user: userentity) => (user.isdisabled ? 1 : 0))
  @type(boolean)
  @alias('disabled')
  @default(false) isdisabled!: boolean

  @default(0)
  @type(number) money!: number

  @type(roleentity) role!: roleentity

  @type(roleentity)
  @isarray() rolelist!: roleentity[]
}

3. roleentity

@fieldprefix('role_')
export class roleentity extends baseentity {
  @tojson((role: roleentity) => (role.isadmin ? 1 : 0))
  @default(false)
  @type(boolean)
  @alias('admin') isadmin!: boolean
}

四、上面的装饰器介绍

// 为类标记全局字段前缀
@fieldprefix('')

// 实体转换到json时候的自定义方法
@tojson((role: roleentity) => (role.isadmin ? 1 : 0))

// 为字段设置默认值
@default(false)

// 为字段强制指定类型
@type(boolean)

// 为字段标记一个别名 就是后端的名字
@alias('admin')

// 标记某个属性不受类全局字段前缀的影响
@ignoreprefix()

// 标记某个数据是数组
@isarray()

五、 再说两句

typescript & vue3 写前端, 也可以很优雅的像 java 一样面向对象

当然, 不是所有的前端都会习惯这些写法, 就这样吧。

到此这篇关于typescript装饰器之项目数据转换详解的文章就介绍到这了,更多相关typescript数据转换内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com