最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

typescript中高級類型Record詳解

 更新時間:2022年11月17日 11:25:55   作者:問白  
這篇文章主要介紹了typescript中高級類型Record,ts文檔上對Record的介紹不多,但卻經(jīng)常用到,Record是一個很好用的工具類型,本文給大家詳細講解需要的朋友可以參考下

ts文檔上對Record的介紹不多,但卻經(jīng)常用到,Record是一個很好用的工具類型。
他會將一個類型的所有屬性值都映射到另一個類型上并創(chuàng)造一個新的類型,先看下Record的源碼。

/**
 * Construct a type with a set of properties K of type T
 */
type Record<K extends keyof any, T> = {
    [P in K]: T;
};

好像源碼也比較簡單,即將K中的每個屬性([P in K]),都轉(zhuǎn)為T類型。常用的格式如下:

type proxyKType = Record<K,T>

會將K中的所有屬性值都轉(zhuǎn)換為T類型,并將返回的新類型返回給proxyKType,K可以是聯(lián)合類型、對象、枚舉…
看幾個demo.
demo1:

type petsGroup = 'dog' | 'cat' | 'fish';
interface IPetInfo {
    name:string,
    age:number,
}

type IPets = Record<petsGroup, IPetInfo>;

const animalsInfo:IPets = {
    dog:{
        name:'dogName',
        age:2
    },
    cat:{
        name:'catName',
        age:3
    },
    fish:{
        name:'fishName',
        age:5
    }
}

可以看到 IPets 類型是由 Record<petsGroup, IPetInfo>返回的。將petsGroup中的每個值(‘dog’ | ‘cat’ | ‘fish’)都轉(zhuǎn)為 IPetInfo 類型。
當(dāng)然也可以自己在第一個參數(shù)后追加額外的值,看下面demo2

type petsGroup = 'dog' | 'cat' | 'fish';
interface IPetInfo {
    name:string,
    age:number,
}

type IPets = Record<petsGroup | 'otherAnamial', IPetInfo>;

const animalsInfo:IPets = {
    dog:{
        name:'dogName',
        age:2
    },
    cat:{
        name:'catName',
        age:3
    },
    fish:{
        name:'fishName',
        age:5
    },
    otherAnamial:{
        name:'otherAnamialName',
        age:10
    }
}

可以看到在demo1的基礎(chǔ)上,demo2在
type IPets = Record<petsGroup | ‘otherAnamial’, IPetInfo>; 中除了petsGroup的值之外,還追加了 'otherAnamial’這個值。
下面看一個略復(fù)雜的例子,用axios將http的幾個請求封裝一下,使用Record定義每個請求方法的形狀。

enum IHttpMethods {
    GET = 'get',
    POST = 'post',
    DELETE = 'delete',
    PUT = 'put',
}

const methods = ["get", "post", "delete", "put"];

interface IHttpFn {
    <T = any>(url: string, config?: AxiosRequestConfig): Promise<T>
}

type IHttp = Record<IHttpMethods, IHttpFn>;

const httpMethods: IHttp = methods.reduce((map: any, method: string) => {
    map[method] = (url: string, options: AxiosRequestConfig = {}) => {
        const { data, ...config } = options;
        return (axios as any)[method](url, data, config)
            .then((res: AxiosResponse) => {
                if (res.data.errCode) {
                    //todo somethins
                } else {
                    //todo somethins
                }
            });
    }
    return map
}, {})

export default httpMethods;

上面這個demo就先枚舉除了幾個常見的http請求的方法名,而每個方法都接受請求的url以及可選參數(shù)config,然后每個方法返回的都是一個Promise。這種業(yè)務(wù)常見使用Record再合適不過了。使用下面的方式定義了每個方法的形狀。

type IHttp = Record<IHttpMethods, IHttpFn>;

最后只需要遍歷一下幾個方法,對每個方法有各自的具體實現(xiàn)即可。這里是用了reduce的特性,遍歷了一下數(shù)據(jù),然后將所有的方法體放在一個對象中,最終結(jié)果用 httpMethods接受,再將httpMethods對外暴露出去,那么外面就可直接調(diào)用了。這里把一些業(yè)務(wù)的部分抽離出去了(比如設(shè)置請求頭、設(shè)置token之類的),只是為了簡單說明一個比較合適使用Record的業(yè)務(wù)場景。

到此這篇關(guān)于typescript中高級類型Record的文章就介紹到這了,更多相關(guān)typescript高級類型Record內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用JavaScript實現(xiàn)輪播圖效果完整實例

    使用JavaScript實現(xiàn)輪播圖效果完整實例

    我們在各種網(wǎng)頁中經(jīng)常見到輪播圖的效果,下面這篇文章主要給大家介紹了關(guān)于使用JavaScript實現(xiàn)輪播圖效果的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 使用JavaScript 實現(xiàn)的人臉檢測

    使用JavaScript 實現(xiàn)的人臉檢測

    這篇文章主要介紹了使用JavaScript 實現(xiàn)的人臉檢測的方法和實例,非常的不錯,這里推薦給大家,有需要的小伙伴參考下。
    2015-03-03
  • js拼接html注意問題示例探討

    js拼接html注意問題示例探討

    js的拼接html,會有一些細節(jié)是需要注意的,也就是單引號的問題,下面有個示例,大家感受下
    2014-07-07
  • 在JavaScript中通過URL傳遞漢字的方法

    在JavaScript中通過URL傳遞漢字的方法

    在JavaScript中通過URL傳遞漢字的方法...
    2007-04-04
  • 使用html2Canvas打印高清PDF的原理解析

    使用html2Canvas打印高清PDF的原理解析

    這篇文章主要為大家詳細介紹了如何使用html2Canvas打印高清PDF的效果,文中的示例代碼講解詳細,具有一定的參考價值,需要的可以了解一下
    2023-07-07
  • 基于JavaScript制作一個骰子游戲

    基于JavaScript制作一個骰子游戲

    這節(jié)實驗我們將使用?HTML、CSS?和?JavaScript?構(gòu)建一個骰子游戲。設(shè)置兩名玩家(一個人玩也行)然后擲骰子,獲得更高點數(shù)的玩家將贏得游戲,感興趣的可以了解一下
    2022-04-04
  • 一段利用WSH修改和查看IP配置的代碼

    一段利用WSH修改和查看IP配置的代碼

    建議增加查詢條件,更準(zhǔn)確地修改指定網(wǎng)卡。 本人是鐵通的線路,這樣看比較不錯的wsh功能呢,喜歡vbs的朋友,可以用vbs實現(xiàn),功能更強
    2008-05-05
  • 通過遮罩層實現(xiàn)浮層DIV登錄的js代碼

    通過遮罩層實現(xiàn)浮層DIV登錄的js代碼

    遮罩層實現(xiàn)浮層DIV登錄的效果,想必很多的朋友都有遇到過吧,實現(xiàn)起來也是很簡單的,下面有個不錯的實現(xiàn),大家可以感受下
    2014-02-02
  • extjs圖表繪制之條形圖實現(xiàn)方法分析

    extjs圖表繪制之條形圖實現(xiàn)方法分析

    這篇文章主要介紹了extjs圖表繪制之條形圖實現(xiàn)方法,結(jié)合實例形式分析了extjs繪制條形圖的相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2020-03-03
  • nullJavascript中創(chuàng)建對象的五種方法實例

    nullJavascript中創(chuàng)建對象的五種方法實例

    今天上午,非常郁悶,有很多簡單基礎(chǔ)的問題搞得我有些迷茫,哎,代碼幾天不寫就忘。目前又不當(dāng)COO,還是得用心記代碼哦!
    2013-05-05

最新評論

保靖县| 江北区| 白山市| 竹北市| 渝中区| 武胜县| 鄂托克旗| 鄂尔多斯市| 云霄县| 中西区| 衡阳县| 中阳县| 昌吉市| 亳州市| 邻水| 微山县| 达州市| 武陟县| 灵武市| 兴化市| 木兰县| 奉新县| 定日县| 陆丰市| 和平县| 南皮县| 丹凤县| 蒙山县| 济源市| 广饶县| 凌源市| 民勤县| 扎囊县| 长岛县| 重庆市| 吐鲁番市| 拜城县| 嘉黎县| 萍乡市| 鹤岗市| 原阳县|