TS 项目中高效处理接口返回数据方法详解

 更新时间:2023年01月05日 08:40:26   作者:xietiansheng  
这篇文章主要为大家介绍了TS 项目中如何高效的处理接口返回的数据的方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

写在前面

TypeScript 项目中,TypeScript 对接口返回数据的处理,是日常项目开发中一个比较棘手的问题。

那我们该如何 高效 的解决这个问题呢?

问题

项目中使用 ts 都会碰到如下场景:从接口请求过来的数据该如何进行处理?

const fetchInfo = async (url: string, id: string) => {
  return $http.get(url, params);
}
const res = await fetchInfo('/info', '886');
// 假设 `/info` 接口返回如下数据
{ id: '886', 🙈:{ name: 'Jack', 📱: { brand: 'Chinese Pineapple' } } }

那我们该如何得到 🙈 的名字以及使用的 📱 品牌呢?

解答

目前比较常用的写法有以下两种

any 大法:

const res:any = await fetchInfo('/info', '886');
console.log(res.🙈.name) // Jack
console.log(res.🙈.age)  // 3

更加优雅的 interface 写法:

/** 根据接口返回的数据,声明对应的 interface **/
interface Info {
  id: string;
  🙈: Monkey;
}
interface Monkey {
  name: string;
  📱: Phone;
}
interface Phone {
  brand: string;
}
/** 改写 `fetchInfo` 函数返回值类型 **/
const fetchInfo = async (url: string, id: string): Promise<Info> => {
  return $http.get(url, params);
}
const res = await fetchInfo('/info', '886');
console.log(res.🙈.name) // Jack
console.log(res.🙈.age)  // 3

区别

两种实现方式的区别十分明显:

any 大法

  • ✨ 前期开发代码量少,快速简单。
  • 🚨 由于未定义 interface 导致整个项目充斥着大量 any 类型,项目沦为 AnyScript
  • 🚨 无法获得健全的 ts 语法检测功能,弱化了使用 ts 的作用。
  • 🚨 后期维护成本高,后端修改字段,ts 语法无法检测。

interface

  • 🚨 前期开发代码量大,需要为每个接口定义 interface
  • ✨ 获得丰富的代码提示以及语法检测能力。
  • ✨ 后期项目易维护,接口字段改动,只需要同步更新 interface 数据即可实现类型检测。

总结

通过上面的总结不难看出,interface 方式优势众多,但同时也有着一个致命的弊端:

我们在前期的开发过程中需要对所有接口返回的不同数据类型定义对应的 interface

例如上面示例的 /info 接口我们就需要定义三个 interface ,实际项目中,字段数量可能达到几十上百个!

interface Info {
  id: string;
  🙈: Monkey;
}
interface Monkey {
  name: string;
  📱: Phone;
}
interface Phone {
  brand: string;
}

这对于我们前期开发效率来说无疑是 毁灭性 的💥💥💥

🚀 必备高效神器

基于上面 interface 方式所面临的问题

给大家安利一款前端在线代码生成工具:JsonToAnyGitee / GitHub

能够很轻松的将我们接口返回的 JSON 数据转换成我们前端所需要的 interface

最大限度的节省了我们手动定义 interface 的时间

p>至此,我们完美解决的了 interface 方式最大的弊端,一劳永逸🎉。

以上就是TS 项目中如何高效的处理接口返回的数据的详细内容,更多关于TS 项目处理接口返回数据的资料请关注脚本之家其它相关文章!

相关文章

  • 微信小程序中用WebStorm使用LESS

    微信小程序中用WebStorm使用LESS

    这篇文章主要介绍了微信小程序中用WebStorm使用LESS的相关资料,需要的朋友可以参考下
    2017-03-03
  • JS前端轻量fabric.js系列之画布初始化

    JS前端轻量fabric.js系列之画布初始化

    这篇文章主要为大家介绍了JS前端轻量fabric.js系列之画布初始化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 用JS创建一个录屏功能

    用JS创建一个录屏功能

    这篇文章主要介绍了利用JS创建一个录屏功能,创建这个功能钱我们首先创建一个HTML文件,包含记录按钮和一个播放标签,下面来看看创建的详细过程
    2021-11-11
  • 微信小程序 传值取值的几种方法总结

    微信小程序 传值取值的几种方法总结

    这篇文章主要介绍了微信小程序 传值取值的几种方法总结的相关资料,这里对这几种方法进行了详解,并附示例代码,需要的朋友可以参考下
    2017-01-01
  • JS中this的4种绑定规则详解

    JS中this的4种绑定规则详解

    如果你学过面向对象编程,那你肯定知道干什么用的,如果你没有学过,那么暂时可以不用看这篇文章,this既不指向函数自身,也不指函数的词法作用域,具体怎么使用JS中的this,JS中的this绑定规则又是什么?
    2020-02-02
  • You-Dont-Know-JS词法作用域及两种常见的模型学习文档

    You-Dont-Know-JS词法作用域及两种常见的模型学习文档

    这篇文章主要为大家介绍了JS 词法作用域及两种常见的模型详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 微信小程序使用navigateTo数据传递的实例

    微信小程序使用navigateTo数据传递的实例

    这篇文章主要介绍了微信小程序使用navigateTo数据传递的实例的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • 微信小程序之前台循环数据绑定

    微信小程序之前台循环数据绑定

    这篇文章主要介绍了微信小程序之前台循环数据绑定的相关资料,这里提供实例帮助大家学习理解这部分内容,需要的朋友可以参考下
    2017-08-08
  • Server-sent events实时获取服务端数据技术详解

    Server-sent events实时获取服务端数据技术详解

    这篇文章主要为大家介绍了Server-sent events实时获取服务端数据技术详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 前端JS实现太极图案图文示例

    前端JS实现太极图案图文示例

    这篇文章主要为大家介绍了前端JS实现太极图案图文示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论