日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
TypeScript類型挑戰(zhàn):元組轉(zhuǎn)換為對(duì)象

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

在金華等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站制作,金華網(wǎng)站建設(shè)費(fèi)用合理。

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

題目描述

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

例如:

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

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

題目解答

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

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

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

這意味著我們可以檢查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ù)組中就無法實(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

可以使用映射類型來遍歷對(duì)象:

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

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

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

但是這時(shí)候報(bào)錯(cuò)了:

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

type TupleToObject = {
[Value in T[number]]: Value;
};

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

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


標(biāo)題名稱:TypeScript類型挑戰(zhàn):元組轉(zhuǎn)換為對(duì)象
URL網(wǎng)址:http://www.dlmjj.cn/article/djioios.html