日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
TypeScript 類型挑戰(zhàn):實現(xiàn) Pick

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

為邛崍等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及邛崍網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)、邛崍網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

下面來看一個難度為簡單的題目:實現(xiàn) Pick

題目描述

實現(xiàn) TS 內(nèi)置的 Pick,但不可以使用它。

從類型 T 中選擇出屬性 K,構(gòu)造成一個新的類型。

例如:

interface Todo {
title: string
description: string
completed: boolean
}

type TodoPreview = MyPick

const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}

題目解答

Pick 類型用于從T類型中選擇部分屬性K來構(gòu)造新的類型。

首先,我們需要遍歷對象 T。那就要使用映射類型來遍歷:

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

然后,要想迭代獲取對象的某個部分,就需要指定要迭代的key:

type MappedType = {
[Key in Keys]: T[Key];
};

但是,這樣寫就會有兩個錯誤:

  • 不能將類型“Keys”分配給類型“string | number | symbol”。
  • 類型“Key”無法用于索引類型“T”。

這兩個錯誤都與迭代規(guī)則有關(guān):

  • key 可以是string、number、symbol;
  • 如果T中不存在Key,就不能調(diào)用T[Key]。

如果規(guī)則 2 成立,那么規(guī)則 1 一定是成立的,因為現(xiàn)有的 keys 是指定類型之一。為了迭代現(xiàn)有的 key,我們需要使用extends關(guān)鍵字進行約束。這樣,如果指定不存在的 key,TypeScript 將拋出一個錯誤,如果T中不存在這個 key,就不能調(diào)用T[key]。

Pick的實現(xiàn)如下:

type MyPick = {
[Key in Keys]: T[Key];
};

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


文章題目:TypeScript 類型挑戰(zhàn):實現(xiàn) Pick
文章轉(zhuǎn)載:http://m.5511xx.com/article/dhcjsse.html