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

TypeScript 類型挑戰(zhàn):實現(xiàn) Pick

開發(fā) 前端
本文主要解答來自 Type Challenges 中的 TS 類型挑戰(zhàn)問題,以此更好的了解 TS 的類型系統(tǒng),編寫自己的類型工具。

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

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

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

題目描述

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

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

例如:

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

type TodoPreview = MyPick<Todo, 'title' | 'completed'>

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

題目解答

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

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

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

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

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

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

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

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

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

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

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

type MyPick<T, Keys extends keyof T> = {
[Key in Keys]: T[Key];
};

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

責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2024-03-04 06:40:49

工具類型TypeScripDeepPick

2022-05-19 09:01:08

TypeScript元組對象

2022-04-11 08:42:09

TypeScript子類型定義

2022-09-14 15:24:57

typescript快排

2021-06-09 07:55:19

Typescript類型檢查

2022-02-09 08:11:50

架構

2021-06-05 21:30:24

typescriptOverride檢查

2022-09-20 14:43:55

TypeScript類型體操

2022-02-25 09:06:02

TypeScripnever工具

2021-07-27 06:06:34

TypeScript語言運算符

2024-05-11 10:19:31

TypeScript類型接口

2021-08-18 07:56:05

Typescript類型本質

2022-08-08 09:00:42

TypeScript映射類型

2021-05-16 18:02:52

系統(tǒng)編程JavaScript

2021-12-10 08:21:15

TypeScript高級類型類型體操

2022-06-19 22:54:08

TypeScript泛型工具

2020-12-29 07:15:34

TypeScript語言代碼

2025-01-20 00:13:19

TypeScript操作符數(shù)據(jù)類型

2019-11-08 09:48:07

回歸測試軟件測試軟件開發(fā)

2022-01-19 21:54:50

CSS遮罩效果Gif 圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 福利一区二区 | 久久久久久久综合色一本 | 精品香蕉一区二区三区 | 精品无码久久久久久国产 | 欧美精 | 夜夜草视频 | 日韩一区二区福利 | 国产精品久久久久无码av | 91在线一区二区 | 亚洲精品在线观 | 日韩欧美亚洲 | 日韩视频精品 | 成人国产精品久久久 | 欧美日在线 | 亚洲视频中文字幕 | 理论片免费在线观看 | 黄色片在线观看网址 | 黄色网址在线播放 | 九色国产 | 久久久精品一区二区 | 91伊人网 | 久久精品亚洲精品国产欧美 | 久久人体| 日韩一级在线 | 亚洲一二三区av | 91精品午夜窝窝看片 | 亚洲欧美综合精品久久成人 | 在线不卡av| 国产在线一区二区三区 | 最新国产视频 | 欧美久久不卡 | 欧美电影大全 | 久草色视频 | 成人免费视频 | 国产精品一区久久久 | 成人h电影在线观看 | 国产成人麻豆免费观看 | 全免费a级毛片免费看视频免费下 | 欧洲毛片 | 天天操夜夜操免费视频 | 国产精品欧美一区二区 |