成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

TypeScript 類型挑戰(zhàn):元組轉(zhuǎn)換為對象

開發(fā) 前端
一些前端面試中考察到了 TypeScript 高級類型的定義,本系列主要解答來自 Type Challenges 項目中的 TS 類型挑戰(zhàn)問題,以此更好的了解 TS 的類型系統(tǒng),編寫自己的類型工具,更好的應(yīng)對前端面試。

高質(zhì)量的類型可以提高項目的可維護(hù)性并避免一些潛在的漏洞。

一些前端面試中考察到了 TypeScript 高級類型的定義,本系列主要解答來自 Type Challenges 項目中的 TS 類型挑戰(zhàn)問題,以此更好的了解 TS 的類型系統(tǒng),編寫自己的類型工具,更好的應(yīng)對前端面試。

下面來看一個難度為簡單的題目:元組轉(zhuǎn)換為對象

題目描述

傳入一個元組類型,將這個元組類型轉(zhuǎn)換為對象類型,這個對象類型的鍵/值都是從元組中遍歷出來。

例如:

const tuple = ['tesla', 'model 3', 'model X', 'model Y'] as const

type result = TupleToObject<typeof tuple>
// expected { tesla: 'tesla', 'model 3': 'model 3', 'model X': 'model X', 'model Y': 'model Y'}

題目解答

我們需要從數(shù)組中獲取所有值,并將其作為新對象中的鍵和值。

首先我們知道什么是元組,來看TypeScript 對元組的定義:

元組類型是另一種Array類型,它確切地知道包含多少個元素,以及它在特定位置包含哪些類型。

這意味著我們可以檢查length并得到確切的數(shù)字:

const fullName:[first: string, last: string] = ['hello', 'world'];
const range:[start: number, end: number] = [0, 10];
const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] as const;

type FullNameLength = (typeof fullName)['length'] // 2
type RangeLength = (typeof range)['length'] // 2
type DigitsLength = (typeof digits)['length'] // 10

而在數(shù)組中就無法實現(xiàn)這一點(diǎn):

const fullName:string[] = ['hello', 'world'];
const range:number[] = [0, 10];

type FullNameLength = (typeof fullName)['length'] // number
type RangeLength = (typeof range)['length'] // number

可以使用映射類型來遍歷對象:

type MappedType<T> = {
[Key in keyof T]: T[Key];
};
  • keyof T用于從對象類型T中獲取鍵值 key;
  • in用于對對象鍵值key進(jìn)行迭代;
  • Key 就是對象鍵值 key 本身;
  • T[Key]是指定 Key 的值;

我們使用索引訪問類型來遍歷元組,可以通過T[number]從元組中獲取值。具體實現(xiàn)如下:

type TupleToObject<T> = {
[Value in T[number]]: Value;
};
  • T[number] 用于從元組 T 中獲取值;
  • in 用于迭代元組值;
  • Value 是元組元素,用作構(gòu)建對象的key和value。

但是這時候報錯了:

這時就需要約束泛型的類型,最終的實現(xiàn)如下:

type TupleToObject<T extends readonly any[]> = {
[Value in T[number]]: Value;
};

這里的extends readonly any[] 是調(diào)用T[number] 所必須的,用來約束 T 的類型,T是一個元組,元組元素是只讀的。

Type Challenges:https://github.com/type-challenges/type-challenges

責(zé)任編輯:武曉燕 來源: 前端充電寶
相關(guān)推薦

2022-05-04 09:02:41

TypeScript類型工具

2024-03-26 06:53:41

Python元組轉(zhuǎn)換JSON對象

2009-07-15 16:56:59

Jython類型Java類型

2023-07-12 08:29:58

TypeScrip元組元素

2022-06-01 08:12:32

JS類數(shù)組對象

2024-08-12 08:50:17

2023-10-16 09:26:48

CSS類型轉(zhuǎn)換

2023-03-03 10:26:49

Python內(nèi)建庫模塊

2011-06-01 10:19:41

基類對象派生類對象

2021-01-18 08:52:28

Java對象多態(tài)

2009-07-14 09:06:08

Java對象類型轉(zhuǎn)換

2016-12-14 09:07:54

日期轉(zhuǎn)換中文

2022-09-20 14:43:55

TypeScript類型體操

2010-10-27 13:25:33

Oracle查詢

2021-01-13 05:18:50

數(shù)據(jù)類型性能

2021-07-27 06:06:34

TypeScript語言運(yùn)算符

2022-02-25 09:06:02

TypeScripnever工具

2009-06-05 11:16:58

字符串動態(tài)轉(zhuǎn)換

2021-08-30 07:22:15

Go類型interface

2024-10-30 08:00:00

Python列表元組
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品美女久久久久久免费 | 久久久久国产一区二区三区四区 | 亚洲综合无码一区二区 | 欧美日韩在线精品 | 亚洲第一在线 | 精品国产一区二区三区久久久四川 | 在线不卡av | 亚洲一区欧美 | 天天操天天干天天透 | 国产高清视频一区 | 99热在线免费 | 密色视频| 欧美一级在线 | 国产日韩精品视频 | 国产欧美一区二区三区久久 | 精品福利一区 | 国产一级在线 | 国产精品久久久久久久久免费高清 | 久久久久www | 殴美成人在线视频 | 一区二区三区免费网站 | 亚洲一区二区三区四区五区中文 | 久久久看 | 亚洲有码转帖 | 亚洲精品一区二三区不卡 | 欧美 日韩 在线播放 | 欧美国产视频 | 欧美一级精品片在线看 | 久久综合一区二区三区 | 久久亚洲综合 | 看羞羞视频免费 | 久久tv在线观看 | 国产精品久久久久久亚洲调教 | 日韩中文一区二区 | 亚洲一区二区久久 | 久久中文字幕电影 | 日韩欧美第一页 | 中文字幕第二区 | 国产欧美一区二区三区在线播放 | 免费国产一区二区 | 青青草中文字幕 |