背景某前端项目稳定运行一段时间后。突然有一天,后台的同学找到你,告诉你原来的Student.name要改成Student.fullName,你崩溃了,一遍又一遍的检查代码,一遍又一遍地寻找Student.name测试,确保修改没有问题。最后,您成功地将Student.name更改为Student.fullName。然而没过几天,一个一直正常的功能突然不能用了。你开始调试,发现age原来的整型突然变成了字符串类型。你找后台,后台有个同学想出一句“前端不做检查吗?”,你的心态又崩了……想想下次改什么字段,下次改哪个字段会有问题({{{战战兢兢}}})``请问有什么办法可以一劳永逸的解决这个问题吗?我有点oop编程语言基础,所以我马上想到,这不就是加个adapter吗?很多语言都有内置的adaapter,但是ts没有,怎么回事?算了,自己造个轮子解决方案用ts自己造个api适配器废话少说,直接上传成品:type-json-mapperinstallnpminstalltype-json-mapper--save装饰器使用装饰器来处理类属性,内置了两个装饰器:@mapperProperty($apiName,type)基本数据类型使用这个装饰器接收两个参数:$apiName:接口字段名type:(可选)字段转换类型(可选值:'string'|'int'|'flot'|'boolean'|'date'|'time'|'datetime')@deepMapperProperty($apiName,Class)自定义类型/数组使用这个装饰器接收两个参数:$apiName:接口字段名Class</font>:自定义类序列化内置了两个序列化函数*序列化主要解决前端请求接口时字段和参数类型不正确的问题serialize(Clazz,json,ignore)序列化的json对象接收三个参数:Clazz:自定义类型json:tobeSerializeobjectignore:(boolean)(optional,defaulttrue)不返回值未定义的字段serializeArr(Clazz,jsonArr,ignore)序列化数组接收三个参数:Clazz:自定义类型jsonArr:待序列化数组ignore:(boolean)(optional,defaulttrue)反序列化不返回undefined字段内置反序列化函数有两个deserialize(Clazz,json,ignore)反序列化json对象接收三个参数:Clazz:自定义类型json:需要反序列化的对象ignore:(boolean)(optional,defaulttrue)Do不返回未定义的字段deserializeArr(Clazz,jsonArr,ignore)反序列化的数组接收三个参数:Clazz:自定义类型jsonArr:要反序列化的数组ignore:(boolean)(optional,defaulttrue)不返回值为undefined的字段使用示例首先,我们需要创建几个类,并在类属性中添加type-json-mapper的内置装饰不要忘记在构造函数中初始化类属性import{mapperProperty,deepMapperProperty}from"type-json-mapper";classLesson{@mapperProperty("ClassName")publicname:string;@mapperProperty("Teacher")公共教师:string;@mapperProperty("DateTime","datetime")公共日期时间:字符串;constructor(){this.name="";this.teacher="";this.datetime="";}}classAddress{publicprovince:string;公共城市:字符串;@mapperProperty("full_address")publicfullAddress:string;constructor(){this.province="";这个城市=“”;这个.fullAddress="";}}classStudent{@mapperProperty("StudentID","string")publicid:string;@mapper属性("StudentName","string")publicname:string;@mapperProperty("StudentAge","int")公共年龄:数字;@mapperProperty("StudentSex","int")公共性别:数字;@deepMapperProperty("Address",Address)publicaddress?:Address;@deepMapperProperty("Lessons",Lesson)publiclessons?:Lesson[];constructor(){this.id="";this.name="";这个年龄=0;this.sex=0;this.address=undefined;this.lessons=undefined;}}接口返回数据:letjson={StudentID:"123456",StudentName:"李子明",StudentAge:"9",StudentSex:"1",Address:{省份:"广东",城市:"深圳",full_address:"xxx小学三年级二班",},Lessons:[{ClassName:"中华五千年",teacher:"建国老师",DateTime:1609430399000,},],};开始转换import{deserialize}from'type-json-mapper';try{conststudent=deserialize(Student,json);}catch(err){console.error(err);}