欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

TS?項目中高效處理接口返回數(shù)據(jù)方法詳解

 更新時間:2023年01月05日 08:40:26   作者:xietiansheng  
這篇文章主要為大家介紹了TS?項目中如何高效的處理接口返回的數(shù)據(jù)的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

寫在前面

TypeScript 項目中,TypeScript 對接口返回數(shù)據(jù)的處理,是日常項目開發(fā)中一個比較棘手的問題。

那我們該如何 高效 的解決這個問題呢?

問題

項目中使用 ts 都會碰到如下場景:從接口請求過來的數(shù)據(jù)該如何進行處理?

const fetchInfo = async (url: string, id: string) => {
  return $http.get(url, params);
}
const res = await fetchInfo('/info', '886');
// 假設(shè) `/info` 接口返回如下數(shù)據(jù)
{ 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

更加優(yōu)雅的 interface 寫法:

/** 根據(jù)接口返回的數(shù)據(jù),聲明對應(yīng)的 interface **/
interface Info {
  id: string;
  ??: Monkey;
}
interface Monkey {
  name: string;
  ??: Phone;
}
interface Phone {
  brand: string;
}
/** 改寫 `fetchInfo` 函數(shù)返回值類型 **/
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

區(qū)別

兩種實現(xiàn)方式的區(qū)別十分明顯:

any 大法

  • ? 前期開發(fā)代碼量少,快速簡單。
  • ?? 由于未定義 interface 導(dǎo)致整個項目充斥著大量 any 類型,項目淪為 AnyScript。
  • ?? 無法獲得健全的 ts 語法檢測功能,弱化了使用 ts 的作用。
  • ?? 后期維護成本高,后端修改字段,ts 語法無法檢測。

interface

  • ?? 前期開發(fā)代碼量大,需要為每個接口定義 interface。
  • ? 獲得豐富的代碼提示以及語法檢測能力。
  • ? 后期項目易維護,接口字段改動,只需要同步更新 interface 數(shù)據(jù)即可實現(xiàn)類型檢測。

總結(jié)

通過上面的總結(jié)不難看出,interface 方式優(yōu)勢眾多,但同時也有著一個致命的弊端:

我們在前期的開發(fā)過程中需要對所有接口返回的不同數(shù)據(jù)類型定義對應(yīng)的 interface。

例如上面示例的 /info 接口我們就需要定義三個 interface ,實際項目中,字段數(shù)量可能達到幾十上百個!

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

這對于我們前期開發(fā)效率來說無疑是 毀滅性 的??????

?? 必備高效神器

基于上面 interface 方式所面臨的問題

給大家安利一款前端在線代碼生成工具:JsonToAnyGitee / GitHub

能夠很輕松的將我們接口返回的 JSON 數(shù)據(jù)轉(zhuǎn)換成我們前端所需要的 interface

最大限度的節(jié)省了我們手動定義 interface 的時間

p>至此,我們完美解決的了 interface 方式最大的弊端,一勞永逸??。

以上就是TS 項目中如何高效的處理接口返回的數(shù)據(jù)的詳細內(nèi)容,更多關(guān)于TS 項目處理接口返回數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Google 地圖API資料整理及詳細介紹

    Google 地圖API資料整理及詳細介紹

    本文主要介紹Google 地圖API資料,這里整理了Google地圖API的基本知識,并詳解每個函數(shù)的意思,有需要的小伙伴可以參考下
    2016-08-08
  • 關(guān)于C++ TpeScript系列的泛型

    關(guān)于C++ TpeScript系列的泛型

    這篇文章將從C++模版要解決的問題出發(fā),引出TS泛型要解決的問題,并簡答介紹一些稍微高級的使用場景的相關(guān)資料,需要的朋友可以參考一下
    2021-10-10
  • 微信小程序 圖片上傳實例詳解

    微信小程序 圖片上傳實例詳解

    這篇文章主要介紹了微信小程序 圖片上傳實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 打包非 JavaScript 靜態(tài)資源詳情

    打包非 JavaScript 靜態(tài)資源詳情

    這篇文章主要介紹了打包非 JavaScript 靜態(tài)資源,打包工具中的自定義導(dǎo)入,種常見的方法是利用已有的靜態(tài)導(dǎo)入語法。有些打包工具可能會通過文件擴展名來自動檢測格式,而有些其他打包工具則允許插件使用自定義的 URL Scheme,下面具體內(nèi)舉例說明,需要的朋友可以參考一下
    2021-10-10
  • TypeScript基礎(chǔ)類型介紹

    TypeScript基礎(chǔ)類型介紹

    這篇文章主要介紹了TypeScript基礎(chǔ)類型,布爾值、數(shù)字、字符串、任意類型等多種類型,下面我們就來看看這些類型的詳細介紹,需要的朋友可以參考一下,希望對你有所幫助
    2021-12-12
  • 二維碼條形碼生成的JavaScript腳本庫

    二維碼條形碼生成的JavaScript腳本庫

    這篇文章主要為大家介紹了二維碼條形碼生成的JavaScript腳本庫實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 自行實現(xiàn)Promise.allSettled的Polyfill處理

    自行實現(xiàn)Promise.allSettled的Polyfill處理

    這篇文章主要為大家介紹了自行實現(xiàn)Promise.allSettled?的?Polyfill處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 微信小程序(十九)radio組件詳細介紹

    微信小程序(十九)radio組件詳細介紹

    這篇文章主要介紹了微信小程序radio組件詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 動態(tài)引入DynamicImport實現(xiàn)原理

    動態(tài)引入DynamicImport實現(xiàn)原理

    這篇文章主要為大家介紹了動態(tài)引入DynamicImport實現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 微信小程序-拍照或選擇圖片并上傳文件

    微信小程序-拍照或選擇圖片并上傳文件

    這篇文章主要介紹了微信小程序-拍照或選擇圖片并上傳文件的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評論